728x90
728x90

API(Application Programming Interface)

들어가며

  • API(Application Programming Interface)에 대해 알아보자.

API ⓒ GeeksforGeeks

 

API(Application Programming Interface)

개념

  • 응용 프로그램 간에 소통하고 상호 작용하기 위한 규칙 세트나 도구 모음
  • 소프트웨어 구성 요소들 간에 데이터 및 서비스를 교환할 수 있도록 하는 인터페이스를 제공한다.
  • 이러한 인터페이스는 다른 시스템이나 애플리케이션에서 기능을 사용하거나 데이터를 공유하는 데 사용된다.
  • API를 사용하면 다른 개발자나 시스템이 제공하는 서비스를 쉽게 통합하고 확장할 수 있다.
    • 예를 들어, 특정 서비스의 데이터를 가져오거나 외부 서비스에 데이터를 전송하는 등의 작업을 API를 통해 수행할 수 있다.
    • 따라서 소프트웨어 개발에서 모듈성상호 운용성을 증가시키는 데 도움이 된다.

 

유형

  • API는 다양한 유형으로 제공될 수 있다.

 

① 웹 API

  • HTTP 프로토콜을 통해 웹을 통해 데이터 및 서비스를 제공하는 API
  • 대표적으로 REST(Representational State Transfer)GraphQL 등이 있다.

 

② 라이브러리 API

  • 프로그래밍 언어에서 사용할 수 있는 함수와 프로시저의 모음을 제공하는 라이브러리에서 제공되는 API
  • 언어별로 다양한 라이브러리들이 API를 포함하고 있다.

 

③ 운영체제 수준의 API

  • 운영체제 기능에 접근하기 위한 API
  • 파일 시스템, 메모리 관리, 네트워킹 등과 관련된 작업을 수행할 수 있다.

 

분류

  • API는 다양한 기준에 따라 분류될 수 있다.

 

① 기능 또는 목적에 따른 분류

  • 웹 API (Web API)
    • 웹을 통해 데이터 및 서비스를 제공하는 API
    • RESTful API, GraphQL이 있다.
  • 라이브러리 API (Library API)
    • 특정 프로그래밍 언어프레임워크에서 사용할 수 있는 함수 및 클래스의 집합을 제공하는 API

 

② 소프트웨어 계층에 따른 분류

  • 하위 수준 API (Low-Level API)
    • 주로 운영체제 수준에서 동작하며, 시스템 자원에 접근할 수 있는 API
    • Windows APIPOSIX API가 있다.
  • 상위 수준 API (High-Level API)
    • 주로 애플리케이션 수준에서 동작하며, 더 추상화된 서비스를 제공하는 API
    • 웹 API가 해당될 수 있다.

 

③ 인터페이스 형태에 따른 분류

  • RESTful API
    • Representational State Transfer의 약자
    • 자원을 URI로 표현하고 HTTP 메서드(GET, POST, PUT, DELETE 등)를 사용하여 자원을 조작하는 형태의 웹 API
  • SOAP API
    • Simple Object Access Protocol의 약자
    • XML 기반의 메시지 교환을 통해 서비스를 제공하는 API
  • GraphQL API
    • 클라이언트가 필요한 데이터를 쿼리하여 가져오는 방식
    • 단일 요청으로 여러 리소스를 얻을 때 효과적이다.

 

④ 공개 범위에 따른 분류

  • 오픈 API (Open API)
    • 외부 개발자들이 해당 API를 사용할 수 있도록 공개된 API
  • 내부 API (Internal API)
    • 주로 특정 조직 내에서 사용되는 API
    • 외부에는 공개되지 않는다.

 

API 엔드포인트(API Endpoints)

개념

  • 웹 API에서 특정 리소스에 접근할 수 있는 URI(Uniform Resource Identifier) 또는 URL(Uniform Resource Locator)
  • 서버가 클라이언트에게 제공하는 특정 기능이나 데이터 집합에 대한 경로를 정의한다.
  • 엔드포인트의 경로와 구조는 API의 설계에 따라 다르며, RESTful API에서는 자원을 표현하고 HTTP 메서드를 사용하여 해당 자원에 대한 작업을 수행한다.

 

구조

  • 일반적으로 API 엔드포인트는 다음과 같은 구조를 가지게 된다.
http://api.example.com/{version}/{resource}/{identifier}

 

@http://api.example.com@

  • API가 호스팅되는 도메인 또는 서버의 주소

 

@{version}@

  • API의 버전
  • API를 업데이트하거나 변경할 때, 버전을 통해 호환성을 유지할 수 있다.

 

@{resource}@

  • API에서 제공하는 특정 리소스
  • 예를 들어, 사용자 정보를 다루는 API라면 @users@와 같은 리소스가 될 수 있다.

 

@{identifier}@

  • 특정 리소스를 식별하는 데 사용되는 값이며, 이 부분은 선택적으로 사용될 수 있다.
  • 사용자 ID다른 식별자가 될 수 있다.

 

예1) 사용자 정보를 가져오는 API의 엔드포인트

GET http://api.example.com/v1/users/123

 

  • 버전 1(@v1@)의 API에서 ID가 @123@인 사용자의 정보를 가져오라는 요청을 나타낸다.

 

예2) 액티비티를 가져오는 API의 엔드포인트

① 랜덤으로 선택된 액티비티 가져오기

  • 호출 가능한 액티비티 중, 랜덤으로 선택된 액티비티를 가져온다.
  • @서버주소/endpoint@와 같은 형식을 사용한다.

 

Request
GET https://www.apiexample.com/random

 

Response
{
  "activity": "Learn Express.js",
  "availability": 0.25,
  "type": "education",
  "participants": 1,
  "price": 0.1,
  "accessibility": "Few to no challenges",
  "duration": "hours",
  "kidFriendly": true,
  "link": "https://expressjs.com/",
  "key": "3943506"
}

 

② 액티비티를 필터(Filter)하여 가져오기

  • @type@이나 @participants@ 값을 필터하여 액티비티를 가져온다.
  • @서버주소/endpoint?쿼리1=값1&쿼리2=값2&...&쿼리n=값n@와 같은 형식을 사용한다.

Postman에서 필터 기능을 이용하여 GET 요청을 보내는 모습

 

Request
GET https://www.apiexample.com/filter?type=education

 

Response
[
  {
    "activity": "Learn Express.js",
    "availability": 0.25,
    "type": "education",
    "participants": 1,
    "price": 0.1,
    "accessibility": "Few to no challenges",
    "duration": "hours",
    "kidFriendly": true,
    "link": "https://expressjs.com/",
    "key": "3943506"
  },
  {
    "activity": "Learn React.js",
    "availability": 0.5,
    "type": "education",
    "participants": 1,
    "price": 0.2,
    "accessibility": "Some challenges",
    "duration": "hours",
    "kidFriendly": true,
    "link": "https://reactjs.org/",
    "key": "7890123"
  }
]

 

③ 키(Key)를 이용하여 액티비티 가져오기

  • 특정한 키를 이용하여 액티비티를 가져온다.
  • @서버주소/endpoint/{path-parameter}@와 같은 형식을 사용한다.
    • @{path-parameter}@ 부분에 @id@와 @user_name@과 같은 특별한 값을 입력할 수 있다.

 

Request
GET https://www.apiexample.com/activity/3943506

 

Response
{
  "activity": "Learn Express.js",
  "availability": 0.25,
  "type": "education",
  "participants": 1,
  "price": 0.1,
  "accessibility": "Few to no challenges",
  "duration": "hours",
  "kidFriendly": true,
  "link": "https://expressjs.com/",
  "key": "3943506"
}

 

API 인증(Authentication)

  • 애플리케이션 간 통신에서 보안을 강화하기 위해 사용되는 중요한 요소
  • API는 다른 시스템과의 통합을 용이하게 하지만, 불법 액세스와 같은 보안 위협으로부터 보호해야 한다.

 

 

 

방법

① HTTP 기본 인증(HTTP Basic Authentication)

  • 사용자 이름과 비밀번호를 사용하여 간단한 인증을 제공한다.
  • 그러나 이 방법은 보안이 취약하므로 HTTPS와 함께 사용해야 한다.
  • 인증 정보는 요청 헤더Base64로 인코딩되어 포함된다.
 

Base64 Decode and Encode - Online

Decode from Base64 format or encode into it with various advanced options. Our site has an easy to use online tool to convert your data.

www.base64decode.org

Base64로 인코딩되어 요청 헤더에 담긴 인증 정보의 모습
Base64

 

Base64를 사용하는 가장 큰 이유는 Binary 데이터를 텍스트 기반 규격으로 다룰 수 있기 때문이다. 

 

 

② API 키(API Key)

  • 일반적으로 긴 문자열로 구성된 특별한 키로, API를 사용하는 클라이언트가 이 키를 함께 제공하여 인증하는 방법
  • 키(Key)는 개발자에게 발급되며, 이를 통해 API 제공자는 각 요청을 식별할 수 있다.
  • 보안 수준이 낮아 일부 공개된 정보에 사용하기 적합하다.

 

③ OAuth(Open Authorization)

  • OAuth는 사용자가 다른 웹 사이트 또는 애플리케이션을 위임하여 다른 애플리케이션에서 사용할 수 있는 토큰을 제공하는 프로토콜이다.
  • 주로 소셜 미디어 및 제3의 서비스와 통합할 때 사용된다.
  • OAuth는 특히 사용자 인증 및 권한 부여를 위한 표준 프로토콜이다.

 

④ 토큰 기반 인증 (Token-Based Authentication)

  • 사용자가 로그인하면 서버는 클라이언트에게 토큰(Token)을 제공하고, 이 토큰은 이후의 요청에서 사용된다.
  • 일반적으로 JWT(JSON Web Token) 또는 OAuth 토큰이 사용된다.
  • 토큰은 서버에서 발급되어 유효기간이 있으며, 보안을 강화하고 사용자 인증을 관리한다.

 

⑤ API 서명(API Signing)

  • 요청에 서명을 추가하여 메시지의 무결성을 보장한다.
  • 일반적으로 타임 스탬프비밀 키를 사용하여 요청을 서명하고, 서버는 이를 검증하여 요청의 유효성을 확인한다.

 

참고 사이트

 

API - 나무위키

이 저작물은 CC BY-NC-SA 2.0 KR에 따라 이용할 수 있습니다. (단, 라이선스가 명시된 일부 문서 및 삽화 제외) 기여하신 문서의 저작권은 각 기여자에게 있으며, 각 기여자는 기여하신 부분의 저작권

namu.wiki

 

728x90
728x90