[241112 TIL] 본캠프 30일차
API (Application Programming Interface)
다른 소프트웨어 시스템과 통신하기 위해 따라야 하는 규칙을 정의한다. 개발자는 애플리케이션이 다른 애플리케이션과 프로그래밍 방식으로 통신할 수 있도록 API를 표시하거나 생성한다. 즉, API는 클라이언트와 리소스 사이의 게이트웨이라고 할 수 있다.
클라이언트
웹에서 정보에 액세스하려는 주체로서 API를 사용하는 사람 또는 소프트웨어 시스템일 수 있다.
리소스
다양한 애플리케이션이 클라이언트에게 제공하는 정보로서 이미지, 동영상, 텍스트, 숫자 또는 모든 유형의 데이터일 수 있다.
서버
클라이언트에게 리소스를 제공하는 시스템이다.
REST (Representational State Transfer)
API 작동 방식에 대한 조건을 부과하는 소프트웨어 아키텍처로서, 처음에는 인터넷과 같은 복잡한 네트워크에서 통신을 관리하기 위한 지침으로 만들어졌다. REST 기반 아키텍처를 사용하면 대규모의 고성능 통신을 안정적으로 지원할 수 있고, 쉽게 구현하고 수정할 수 있다.
REST API (RESTful API)
REST 아키텍처 스타일을 따르는 API이다. REST 아키텍처를 구현하는 웹 서비스를 RESTful 웹 서비스라고 하는데, REST API와 RESTful API는 같은 의미로 사용할 수 있다.
REST 아키텍처 스타일의 원칙
균일한 인터페이스
서버가 표준 형식으로 정보를 전송함을 의미한다.
- 요청은 리소스를 식별해야 한다.
- 클라이언트는 원하는 경우 리소스를 수정하거나 삭제하기에 충분한 정보를 리소스 표현에서 가질 수 있다.
- 클라이언트는 표현을 추가로 처리하는 방법에 대한 정보를 수신한다.
- 클라이언트는 작업을 완료하는데 필요한 다른 모든 관련 리소스에 대한 정보를 수신한다.
무상태
서버가 이전의 모든 요청과 독립적으로 모든 클라이언트 요청을 완료하는 통신 방법으로, 이는 서버가 매번 요청을 완전히 이해해서 이행할 수 있음을 의미한다.
계층화 시스템
클라이언트는 클라이언트와 서버 사이의 다른 승인된 중개자에게 연결하는 동시에 여전히 서버로부터 응답을 받을 수 있다. 서버는 클라이언트 요청을 보안, 애플리케이션 및 비즈니스 로직 등 여러 계층으로 여러 서버에서 실행할 수 있도록 RESTful 웹 서비스를 설계할 수 있다.
캐시 가능성
서버 응답 시간을 개선하기 위해서 클라이언트 또는 중개자에 일부 응답을 저장하는 프로세스인 캐싱을 지원한다.
온디맨드 코드
서버는 소프트웨어 프로그래밍 코드를 클라이언트에 전송하여 클라이언트 기능을 일시적으로 확장하거나 사용자 지정할 수 있다.
RESTful API의 이점
확장성
REST가 클라이언트-서버 상호작용을 최적화하기 때문에 효율적으로 크기를 조정할 수 있다. 무상태는 서버가 과거 클라이언트의 요청 정보를 유지할 필요가 없기 때문에 서버 로드를 제거하고, 잘 관리된 캐싱은 일부 클라이언트-서버 상호작용을 부분적으로 제거한다.
유연성
완전한 클라이언트-서버 분리를 지원하며, 각 부분이 독립적으로 발전할 수 있도록 다양한 서버 구성 요소를 단순화하고 분리한다.
독립성
사용되는 기술과 독립적이기 때문에 API 설계에 영향을 주지 않고 다양한 프로그래밍 언어로 클라이언트 및 서버 애플리케이션을 모두 작성할 수 있다.
RESTful API의 작동 방법
- 클라이언트가 서버에 요청을 전송한다.
- 서버가 클라이언트를 인증하고 해당 요청을 수행할 수 있는 권한이 클라이언트에게 있는지 확인한다.
- 서버가 요청을 수신하고 내부적으로 처리한다.
- 서버가 클라이언트에게 응답을 반환한다.
RESTful API 인증 방법
HTTP 인증
REST API를 구현할 때 직접 사용할 수 있는 일부 인증 체계를 정의한다.
- 기본 인증 : 요청 헤더에 사용자 이름과 암호를 넣어서 전송
- 전달자 인증 : 토큰 전달자에 대한 액세스 제어를 제공
API 키
서버는 고유하게 생성된 값을 최초 클라리언트에 할당하고, 클라이언트는 리소스에 액세스하려고 할 때마다 고유한 API 키를 사용해서 본인을 검증한다.
OAuth
모든 시스템에 대해 매우 안전한 로그인 액세스를 보장하기 위해서 암호와 토큰을 결합한다.
RESTful API 클라이언트 요청에 포함된 내용
고유 리소스 식별자
서버는 고유한 리소스 식별자로 각 리소스를 식별하는데, REST 서비스의 경우 일반적으로 URL을 사용해서 리소스 식별을 수행한다.
메서드
HTTP 메서드는 리소스에 수행해야 하는 작업을 서버에 알려준다.
- GET : 서버의 리소스에 액세스
- POST : 서버에 데이터를 전송
- PUT : 서버의 리소스를 업데이트
- DELETE : 서버의 리소스를 제거
HTTP 헤더
클라이언트와 서버 간에 교환되는 메타 데이터이다.
- 데이터 : HTTP 메서드가 성공적으로 작동하기 위한 데이터
- 파라미터 : 수행해야 할 작업에 대한 자세한 정보를 파라미터로서 서버에 제공
- URL 세부 정보를 지정하는 경로 파라미터
- 리소스에 대한 추가 정보를 요청하는 쿼리 파라미터
- 클라이언트를 빠르게 인증하는 쿠키 파라미터
RESTful API 서버 응답에 포함된 내용
상태 표시줄
요청 성공 또는 실패를 알리는 3자리 상태 코드가 존재한다.
- 200 : 일반적인 성공 응답
- 201 : POST 메서드 성공 응답
- 400 : 서버가 처리할 수 없는 잘못된 요청
- 404 : 리소스를 찾을 수 없음
메시지 본문
서버는 요청 헤더에 포함된 내용을 기반으로 적절한 표현 방식을 선택하고, 클라이언트는 데이터 작성 방식을 일반 텍스트로 정의하는 XML 또는 JSON 형식으로 정보를 요청할 수 있다.
헤더
응답에 대한 추가 컨텍스트를 제공하고 서버, 인코딩, 날짜 및 컨텐츠 유형 등의 정보를 포함한다.