728x90
728x90
API(Application Programming Interface)
들어가며
- API(Application Programming Interface)에 대해 알아보자.
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 API나 POSIX 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@와 같은 형식을 사용한다.
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를 사용하는 가장 큰 이유는 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)
- 요청에 서명을 추가하여 메시지의 무결성을 보장한다.
- 일반적으로 타임 스탬프 및 비밀 키를 사용하여 요청을 서명하고, 서버는 이를 검증하여 요청의 유효성을 확인한다.
참고 사이트
728x90
728x90
'Study > Network' 카테고리의 다른 글
[Network] 400 오류와 401 오류의 차이점 (0) | 2024.11.13 |
---|---|
[Network] 미들웨어(Middleware) (0) | 2023.11.09 |
[Network] HTTP 응답 상태 코드(Response Status Code) (0) | 2023.11.08 |
[Network] HTTP 요청(Request) 메서드의 종류 (0) | 2023.11.08 |