API는 무엇인가요?
Facebook, Hashnode, dev.to, LinkedIn 등 贵重的 애플리케이션에 로그인하는 것을 이해하고 있나요? 저는 귀하의 주목을 사로 잡았고 贵方이 빨라지는 생각을 시작했다고 생각합니다. 또한 WakaNow 항공 앱에 가서 전 세계의 가장 inexpensive 요금을 얻는 것이 얼마나 쉬웠는지 상상하셨나요? 그리고 축구 사랑자들도 제외되지 않고 실시간으로 점수를 확인할 수 있습니다.
이러한 것들의 모든 정보를 얻거나 자세한 정보를 확인하기 위해 다른 시스템과 통신하는 것이 있다고 답입니다. 이러한 통신은 API를 사용하여 이뤄집니다.
이 記事에서는 API의 지식을 자신의 것으로 가져가고, API의 종류와 그들의 작동 방식에 대해 명확하고 적절한 이해를 얻을 수 있습니다.
I. API에 대한 개념
A. API가 무엇인가요?
API는 어떤 시스템이나 기술이 자신과 통신하기 위해 정보나 데이터를 공유하는 도구이자 기술적 인터페이스입니다. 시스템이 서로 통신하는 것을 Layered Interface라고 표현할 수 있습니다. 이러한 공유는 기술적 규칙 또는 표준을 따라 이뤄집니다.
B. API의 중요성을 어떻게 표현하呢?
APIs는 시스템과 기술을 대화하여 데이터 및 기능을 공유하고 동일하게 작동하여 강력하고 효율적인 시스템을 만들 수 있게 해줍니다. 또한 API는 개발자에게 어떤 특정 태스크를 수행하기 위해 어떤 응용 프로그램을 함께 가져다 사용할 수 있는 초boot 능력을 제공합니다. 例如, 패션 블로그는 Flutterwave API를 통해 고객이 디자인 또는 セミ나를 결제할 수 있게 하고, 그들의 Google 계정을 사용하여 연결된 어느 응용 프로그램에 로그인할 수 있습니다.
API는 third-party data를 얻고 정보를 교换来 Software Engineer로서 자신감이 든 일을 할 수 있게 해줍니다.
C. API는 어떻게 작동하나요?
let us take this analogy into play, you want to study at a University. You have to follow a series of processes that would involve sitting for exams and with the result applying to your desired institution. You don’t have to go to the Admission Officer directly for an application, rather you simply visit their portal, input your details and upload credentials. While waiting for admission, a series of things happen at the backend you have no idea but will receive admission if the requirements are met.
The entire process is as follows, we want to communicate with the School admission Office and since we cannot access the Admission Office directly we use an API layer which in this scene is the School portal which you will refer to as an Endpoint. Each Endpoint has its protocol which is required and the expected result. In this example, the school portal is shielding you from every complicated thing going on in the admission office.
상상해봐, 입학 포털이 없었다면, 你的 자료를 제출하려면 대학 입학 국ard에 가야 했을 것이고, 시간이 많이 소요되고, 실수가 있을 수 있었을 것이다.
인터넷을 통해 두 가지 Sofware 응용 프로그램을 연결하려면, 하나의 프로그램, 클라이언트라고 불리는 것, 다른 응용 프로그램의 API에 요청을 보낸다. 클라이언트는 응용 프로그램의 데이터 베이스에서 자원을 요청하거나 서버에 대한 행위를 요청한다.
클라이언트의 요청을 받고 이를 유효성 검사하고 나면, API는 원하는 행위를 실행하고 클라이언트에게 응답을 돌려준다. 이 답은 클라이언트가 요청한 자원의 상태(완료되었거나 거부됨)을 포함한다.
그림 1. API의 작동
D. API의 종류
약 네 가지 different 종류의 API가 있으며, 이를 설명할 것이다.
공개 API: 공개 API 또는 외부 API는 일반 大众에 公开되고 사용 가능하게 만들어진 유형의 API이다. API의 주인은 자신의 자료와 자원을 3rd parties에게 공유하며 그들이 include하는 organisations, developers, 일반 大众 등을 포함할 수 있다. 사용자가 그것을 기능 빌딩하거나, 응용 프로그램에 통합하거나 개선 작업을 수행하기 위한 특수 목적을 가지고 있다.
공개 API의 一些 예시로는; Bitquery, Adoptapet, covalenthq를 볼 수 있다.
비공개 API:
개인 API 또는 내부 API는 해당 API를 만든 개발자 또는 개인에게 의해 사용할 수 있는 유형의 API로, 소유자가 3rd 파티에게 초대를 보냈을 때 лько 접근 가능합니다.
개인 API의 一些 예시로는;
파트너 API
비즈니스나 조직이 외부 개발자나 파트너가 자신의 서비스, 데이터 또는 플랫폼과 통신하고 상호 작용할 수 있도록 제공하는 응용 프로그램 프로그래밍 인터페이스(API)를 파트너 API라고 하며, 서드파티 API 또는 개발자 API라고도 합니다. 이러한 API는 다양한 시스템, 프로그램 또는 서비스의 통합을 용이하게 하기 위해 설계되었습니다.
파트너 API는 자사 제품이나 서비스의 유용성을 확장하고 외부 개발자나 기업과의 협력을 촉진하고자 하는 조직에서 자주 제공합니다. 이러한 API를 통해 파트너는 비즈니스의 데이터, 기능 또는 기술을 활용하는 프로그램, 도구 또는 서비스를 만들 수 있습니다.
파트너 API의 몇 가지 예는 다음과 같습니다;
综合体 API
综合体 API, 또한 统合 API나 섹션 API로 불리는 것, 여러 하위 API나 서비스의 정보나 기능을 하나의 인터페이스로 섞고 통합하는 종류의 API입니다. 이러한 API는 개발자가 하나의 API를 통해 여러 서비스에 アクセス하고 Interact하여 통합 인터페이스를 제공하여 다양한 데이터 소스의 통합적인 보기를 제공합니다.
programmer는 여러 ällor에서 연속적으로 정보를 받거나 여러 행동을 실행해야 할 때, 複合 API를 유용하게 사용할 수 있습니다. 複合 API를 사용하면, 각 API로 따로 쿼리를 날리는 것보다 單独의 요청으로 여러 서비스에 대한 데이터 或者 행동을 실행할 수 있습니다. 통합 과정이 최적화되고, 複雑도가 줄어들고, 효율이 향상되는 것을 results.
다음은 여러 날씨 서비스 제공업체의 데이터를 모아 놓는 複合 API의 예입니다:
이러한 여러 제공업체의 데이터를 모아 놓고 開発자들에게 單独의 날씨 데이터 인터페이스를 제공하기 위해 複合 API를 만들 수 있습니다. 이렇게 하면 開発자는 한번의 API 요청으로 여러 소스의 날씨 정보를 얻을 수 있습니다.
API 구조의 유형
A. Web API
Web API는 우리의 日报생활 중 대부분이 웹에 의해 이루어지므로 가장 일반적으로 사용되는 것입니다. Web API는 다른 ブラ우저에서도 같은 방식으로 동작하도록 표준을 제공하는 것을 말합니다. 通信의 両方을 가리키는 것입니다. Web API는 일반적으로 응용 프로그램 인터페이스(API)として 불리는 것이며, 웹 서비스나 앱에서 제공되는 인터페이스로, 그들과 다른 소프트웨어 프로그램과 オン라인 通信과 인터랙션을 실현할 수 있습니다. 開発자는 웹 API를 통해 웹 응용 프로그램 또는 서비스의 certain capabilities, services, or data를 프로그램적으로 접근할 수 있습니다.
1. RESTful API
RESTful API는 representational state transfer application programming interface의 缩写이며, REST(Representational State Transfer) 아키텍처의 设计原则를 遵循하여 网络上で 컴퓨터들之间의 通信을 실현할 수 있는 一套의 표준입니다.
REST API의 일부
-
요청 —–→ 응답
-
操 作 – GET, POST, PATCH, UPDATE, DELETE
-
端点 – Url
-
매개 변수/바디
-
헤더
그림 2 REST API 도agram
REST의 주요 原则에는:
-
클라이언트-서버 아키텍처: REST는 클라이언트와 서버 组建을 分工시키는 것이어, 그들이 독립적으로 발전할 수 있다. 클라이언트는 서버로 요청을 보낸다고 하자, 서버는 그 요청을 처리하고 응답을 보낸다.
-
상태 없음: REST은 상태 없는 것을 의미하며, 클라이언트가 서버로 보낸 각 요청에는 이해하고 처리하기 위해 필요한 모든 정보를 포함해야 한다. 서버는 요청 사이에 클라이언트 컨텍스트를 저장하지 않는다는 것을 의미하며, 스케일ability를 간단하게 하고 낙门类 缓存的 更好的 지원 할 수 있다.
-
일관성 있는 인터페이스: REST는 일관성 있는 인터페이스 집합과 操作을 推進하며, GET, POST, PUT, DELETE 과 같은 표준 HTTP 메서드를 사용한다. RESTful 시스템에서 모든 자원은 URL(Uniform Resource Locator)를 통해 유니크하게 标识され는다.
-
자원 기반: REST는 모든 것을 자원으로 여기며, 데이터 实体, 서비스, 또는 コレク션 등이 있습니다. 각 자원은 고유한 識別자를 갖고 标准和な HTTP 方法을 사용하여 액세스하고 조작할 수 있습니다.
-
자원 representation: REST의 자원은 JSON (JavaScript Object Notation) 또는 XML (eXtensible Markup Language)과 같은 specific format을 사용하여 representated합니다. 서버는 자원의 representation을 클라이언트로 보내며 이를 통해 데이터, metadata, 또는 하이퍼미디어 링크를 包含할 수 있습니다.
-
状態 없는 인터랙션: 클라이언트가 서버로 보낸 각 요청은 자기 자신을 포함하고 있으며 서버의 이전 요청 또는 状態에 의존하지 않습니다. 이러한 특성은 스케일 ability를 더 나은 것으로 看待되며, 서버는 클라이언트 세션 정보를 관리할 필요가 없습니다.
REST API의 이점
-
간단하고 표준화
-
SCALABLE AND STATELESS
-
HIGH-PERFORMANCE AND CACHEABLE
2. SOAP APIs
SOAP( simpled Object Access Protocol)는 XML 형식을 사용하는 인기있는 Message Protocol로 잘 정의된 스키마와 사용자 표준 프로토콜을 갖추고 있습니다. 세계 대학 웹 컨 Symptotic(W3C)에서 정의되었습니다. SOAP 프로tokol 중에는 HTTP, SMTP, TCP/IP과 같은 인터넷 통신 프로tokol로 구성되어 있습니다.
그림 3 SOAP API diagram
SOAP API 이용 이점
-
언어, 플랫폼, 転送은 독립적입니다.
-
분산 사업 환경에서 좋게 작동합니다.
-
WS* 표준을 통해 중요한 사전 확장성을 제공합니다.
-
내장된 에러 처리를 제공합니다.
- RPC를 지원합니다.
원격 프로시저 호출(RPC) protocol은 여러 파라미터를 보내고 결과를 받는 수단입니다. 远程函数调用, 로컬 컴퓨터에 존재하지 않지만 호출되는 곳에서 배포해야 합니다. 비동기적인 것은 성공으로 표시하기 위해 응답을 얻야 합니다. 클라이언트와 서버之间的 straightforward interaction. RPC API는 操作적인 操作 또는 프로cedure를 수행합니다. RPC는 두 가지 다른 언어, JSON과 XML을 사용할 수 있습니다.
그림 4 AN RPC protocol
GraphQL는 API에 대한 쿼리 언어로, 클라이언트가 특정 데이터를 요청하고 repsonse를 자신의 需要에 따라 형성할 수 있습니다.
GraphQL API의 一些例子
GitHub GraphQL API, Shopify GraphQL API, SpaceX GraphQL API, Yelp GraphQL API, Twitter GraphQL API (Twitter API v2).
API protocol 比較
REST |
SOAP |
RPC |
GraphQL |
XML, JSON, HTTP, 그리고 간단한 텍스트와 함께 작동 |
XML과 intrinsically 함께 작동 |
사용자가 과정 이름을 알아야 함 |
HTTP와 함께 작동 |
데이터에 잘 적용됨 |
과정(동작)에 잘 적용됨 |
特定的 매개 변수와 순서 |
|
谨严한 보안 |
고급 보안 |
||
문서는 하이퍼미edia를 통해 보충 가능 |
개발자들이 사용하기 힘들게 되는 것 |
자세한 文档을 필요로 함 |
|
요청 방법은 GET, PUT, DELETE, PATCH, UPDATE 이다. |
요청 방법은 POST |
요청 방법은 POST |
요청 방법은 POST |
III. 일반 API 용语
A. 엔드포인트
API 엔드포인트는 통신 channel의 한 端点이나 끝입니다. API가 다른 시스템과 대화를 나누는 때, 이 통신의 打交道 지점을 엔드포인트라고 부릅니다. 字面적으로 말하면, APIs가 자원을 보낸 곳과 자원이 떠난 곳을 엔드포인트라고 부릅니다. API에서는 일반적으로 리소스의 위치를 제공하는 유닉한 자원 주소(URL)가 엔드포인트입니다.
엔드포인트의 예는
Twitter API 엔드포인트 예시
트위터 API는 트윗, 다이렉트 메시지, 사용자 등에 대한 데이터를 노출합니다.
특정 트윗의 내용을 검색하려면 트윗 조회 엔드포인트를 사용할 수 있습니다. 이 엔드포인트의 URL은 api.twitter.com/2/tweets{id}입니다 (여기서 {id}는 트윗의 고유 식별자입니다).
B. 요청 및 응답
API 요청은 클라이언트가 서버로 전송하는 메시지입니다. API 요청은 데이터를 접근하거나 수정하거나 특정 작업을 수행하기 위해 API에 보내는 요청입니다. API 응답은 API 요청에 대한 응답으로 반환되는 데이터나 정보입니다.
예를 들어, 사용자가 아래 하이퍼링크를 클릭할 수 있습니다;
<a href='http://localhost:2400/categories/01/flavours'>
맛 카테고리에서 사용 가능한 모든 맛 보기
</a>
HTTP 요청 메시지는 다음과 같이 전송됩니다:
GET /categories/01/flavours HTTP/1.1
호스트: localhost:2400
User-Agent: Chrome/5.0 [compatible, Windows 10]
API 요청
1. Copy codeGET https://api.com/categories/flavours
API 응답
1. Copy codeHTTP/1.1 200 OK
2. Content-Type: application/json
3.
4. {
5. "id": 01,
6. "flavours": "Chocolate"
7. }
이 요청으로부터 我們 可以看出 終端 는 URL – /categories/01/flavours를 사용한다.
요청 방법은 GET이며, HTTP SPECIFICATION은 1.1이며, 도메인은 localhost이며, 포트는 2400이며, Flavours는 자원이며, 사용자 代理(user-agent)은 브라우저와 Operating System을 제공한다.
C. HTTP Methods (GET, POST, PUT, DELETE)
HTTP 프로토콜을 사용하는 API는 HTTP 요청 방법(또한 “HTTP verb”로 불립니다.)를 사용하여 클라이언트 요청을 서버로 전달합니다. 가장 자주 사용되는 HTTP 요청 방법은 GET, POST, PUT, DELETE입니다.
-
GET은 클라이언트가 서버から 데이터를 가져오는 방법입니다.
-
PUT은 기존 데이터를 替換하거나 없으면 데이터를 생성합니다.
-
POST은 주로 새로운 자원을 생성합니다.
-
PATCH가 리소스에서 일부 데이터를 업데이트하는 것을 사용하며
-
DELETE는 클라이언트가 서버上에 지정한 데이터나 리소스를 제거합니다.
D. API 보안 – 인증과 권한
이 두 용어는 서로 유사하게 闻는 것이나 서로 다른 기능을 가지고 있습니다. 인증은 사용자나 Identify의 Verification를 대면하는 것이고, 권한은 사용자가 가지고 있는 Access 또는 행동에 대한 허가를 대면합니다. 이들은 API 보안의 核心部分입니다. 인증과 권한을 사용하는 인기 있는 방법으로 OAuth 2.0가 있습니다.
인증 유형
인증의 다양한 방법이 존재합니다. 다음은 만나고자 하는 API의 인증의 다양한 유형입니다:
E. API 키 및 토큰
API 키는 문자열로 구성된 것이며, 클라이언트 앱의 식별 및 인가를 제공합니다. 换句话说, 서버에 대한 앱 식별과 호출 앱이 API 서버에 대한 접근 권한을 가지고 있는지 여부를 나타냅니다. 모든 활동을 추적하고 恶意 행위를 차단하기 위해 사용되며,
API 키 인증은 HTTP basic 인증의 Limitations, shared login information, shared login information의 주요 문제를 해결하기 위해 만들어졌습니다. 두 가지 목적으로 사용할 수 있습니다. 첫 번째 단계는 클라이언트 앱을 식별하는 것이며, 백엔드 API로 호출을 하고 있는지 여부를 나타냅니다. 두 번째 단계는 클라이언트 앱의 인가를 결정하는 것이며, 호출하는 앱이 API를 호출할 수 있는지 여부를 나타냅니다.
API 키는 웹 应用程序 관리하는 API 키 제공자에서 얻을 수 있습니다.
API 키를 어디에 저장하는지
코드나 파일에 키를 삽입하지 마십시오. 코드나 파일에 키를 삽입하지 마십시오. 이러한 방법은 GitHub에 업로드 할 때 공개되는 위험이 있습니다. API 키를 環境変数에 저장하십시오.
API 키의 예시는 다음과 같습니다.
key: a9nIbdnaoks97028Jlf.ains9NIKQMEO
Accesstoken은 API(Application Programming Interface)에 대한 인증 및 권한 부여에 사용되는 보안 인자입니다. 토큰은 토큰을 보유한 인자가 API에 액세스할 수 있는 유일한 인자입니다.
JSON Web Token(JWT)의 예를 들어보겠습니다:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
이 토큰은 头部, 载荷, 및 签名로 punktuation_dots로 구분되는 JWT입니다. 头部는 Signing 算法 정보를 포함하는 일반적인 정보가 포함되며, 예를 들어:
{
"alg": "HS256",
"typ": "JWT"
}
载荷는 인스턴스(사용자, 클라이언트 등)에 대한 声明 또는 陈述가 포함되며, 주로 주제, 발行者, 만료 시간, 사용자 정의 데이터 등의 정보가 포함되ます. 예를 들어:
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
Signature는 인코딩된 头部, 载荷, 비밀 ключ을 이용해 암호 기술, 예를 들어 HMAC-SHA256를 적용하여 생성합니다. 이 이름의 의미는 토큰의 untampered 정신과 정보의 신뢰성을 보장합니다.
이 JWT를 사용하여 API 요청의 인증 헤더에 포함하여 다음과 같이 노력합니다:
인증: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
API 서버는 그 后的에 토큰의 真伪를 확인하고, 만료를 检查하고, Payload에 포함된 정보를 인증 및 다른 목적으로 사용할 수 있습니다.
여기에 제시된 예시 토큰은 그 説明적인 목적 alone로 사용되었으며, 생산 环境에서 사용하지 않는 것을 주의 하세요.
토큰과 キー는 모두 인증과 認可를 위해 사용되ますが, 다음과 같은 차이가 있습니다.
API キー는 일반적으로 API를 방문할 때 클라이언트나 응용 프로그램의 识別과 인증에 사용되며, 자신의 凭据로 長い 문자열로 乱数 생성され어 exists합니다. 대신 토큰은 인증 과정이 성공적으로 끝나고 인증 받은 クライアント나 사용자에게 given되며 인증 証明서로 기능합니다.
유효 기간: API 제공자가 의도적으로 吊销하지 않거나 rewind하면, API 키는 일반적으로 長い 기간 동안 유효합니다. 대신 토큰은 자주 shoft 기간을 가지고 만료 날짜가 있습니다. 인증 기법에 따라 クラ이언트는 旧的 토큰이 만료되면 재 인증하거나 리 freshing 헀다는 토큰을 사용하여 새로운 토큰을 받아야 합니다.
보안: 토큰은 API 키와 비교해서 더 나은 보안 특징을 제공합니다. 토큰은 제한된 범위나 권한을 가지고 있을 수 있으며, 细分 접근 제어를 허용합니다. 它们还可以被加密、签名或包含提供完整性和真实性的额外声明。 这使得身份验证更加安全,对敏感数据的保护也更加完善。
실제 예시와 사용 사례
A. 天气 API
天气API(Application Programming Interface),或者提供实时天气数据和预报的服务。
例如,
. WeatherAPI.com, Forecast, Meteostat。
B. 社交媒体 API
社交媒体API允许这些平台与其他软件提供商和应用程序集成。
例如,
C. 결제 ゲート웨이 API
소프트웨어 개발자들이 앱 또는 웹사이트에 결제 ゲート웨이 서비스를 integrate하는 기술적 인터페이스는 결제 ゲート웨이 API라고 称呼합니다.
예를 들어
Stripe API는 상품 vendors에게 온라인 결제를 받기 위해 사용할 수 있는 siapgyeo 서비스입니다. Noodlio Pay, Square API, PayPal, Adyen, Paybook, KeyPay, BIPS 의 Invoice (By Coinify)를 제공합니다.
D. Mapping and Geolocation API
Geolocation API는 어떠한 정보도 보관하지 않고, 조회하는 기기から 기존의 데이터를 수집할 수 있도록 합니다. IP 주소, GPS, WiFi, Bluetooth, RFID, GSM/CDMA ID, 인간의 입력 등으로부터 위치 데이터를 다양한 soure에서 수집할 수 있습니다.
지리 위치 API, Mapbox API, OpenStreetMap API, MapQuest API, HERE API를 포함합니다.
IV. 결론 및 주요 내용
이 ARTICLE을 통해 API의 구성, 작동 방법, 실제 샘플 예시, APISecurity, HTTP методы 및 API의 중요성을 이해하게 되었습니다. API는 Sofware Engineer들이 어떤 것을 만들고 있는 것과 어떻게 이를 통합하고 더욱 改善하는지 가능하게 해줍니다. 내가 研究하고 쓸 때 발견한 것은 API 보안이 큰 문제로 나타났습니다. API가 훔쳐지면 연결되어 있는 모든 응용 프로그램에 영향을 미칠 것이니 API 보안에 대한 further research를 하겠습니다.
결론적으로, 이에 관련된 다른 글을 발표할 것입니다. 이는 API를 Exploring하고, API와 코드를 통해 일어나는 것들, API의 좋은 慣習, API 디자인 및 開発에 대해 다룹니다.
A. 주요 키워드는
API – 응용 사용자 인터페이스
RPC – remote procedural call
HTTP – Hypertext Transfer Protocol
B. 더 나은 leaning을 위한 다음 단계
결국, 나는 이러한 주제에 대한 다른 글을 발표 할 것입니다. 이는 API를 탐구하는 것, 코드에서 API와 작업하는 방법, API의 가장 좋은 慣例, API 설계 및 開発에 대해 있을 것입니다.