REST
:Representational State Transfer
REST API
:웹에서 사용되는 데이터나 자원(Resource)을 HTTP URI로 표현하고, HTTP프로토콜을 통해 요청과 응답을 정의하는 방식
:자원에 대한 주소를 정하는 방법
:디자인 원리/제약, 즉 규칙
REST API를 디자인하는 방법
-REST 성숙도 모델 (RIchardson 성숙도 모델(RMM))
<REST 성숙도 모델>
0단계:HTTP 사용
->단순히 HTTP 프로토콜을 사용. 이 경우는 REST API라고 할 수 없으며 REST API를 작성하기 위한 기본단계, 단순히 HTTP 프로토콜을 사용
요청과 응답만 해도 0단계
메소드-행위를 보여줌
1단계:개별 리소스와의 통신 준수
->모든 자원은 개별 리소스에 맞는 엔드포인트를 사용해야하며 요청하고 받는 자원에 대한 정보를 응답으로 전달해야 한다는 것이 1단계의 핵심
->엔드포인트 작성 시, 동사, HTTP 메서드 혹은 어떤 행위에 대한 단어 사용은 지양하고 리소스에 집중해 명사 형태의 단어로 작성하는 것이 바람직. 요청에 따른 응답으로 리소스를 전달할 때에도 사용한 리소스에 대한 정보와 함께 리소스 사용에 대한 성공/실패 여부를 반환해야함.
+엔드포인트
:API가 서버에서 리소스에 접근할 수 있도록 가능하게 하는 URL
:메서드 + URL
->엔드포인트 디자인은 언제, 어떻게 보다 어떤 리소스의 상태를 변화시키는가가 중요
2단계:HTTP 메소드 원칙 준수
->CRUD에 맞게 적절한 HTTP 메서드를 사용하는 것에 중점을 둠.
+GET 메서드는 body를 가지지 않기 때문에 query parameter를 사용하여 필요한 리소스를 전달
+HTTP메서드 사용 규칙
- GET 메서드 같은 경우는 서버의 데이터를 변화시키지 않는 요청에 사용해야 합니다.
- POST 메서드는 요청마다 새로운 리소스를 생성하고 PUT 메서드는 요청마다 같은 리소스를 반환합니다. 이렇게 매 요청마다 같은 리소스를 반환하는 특징을 멱등(idempotent)하다고 합니다. 그렇기 때문에 멱등성을 가지는 메서드 PUT과 그렇지 않은 메서드POST는 구분하여 사용해야 합니다.
- PUT 메서드와 PATCH 메서드도 구분하여 사용해야 합니다. PUT은 교체, PATCH는 수정의 용도로 사용합니다.
-query parameter
:하나의 필터
-path parameter
:고유한 Id를 가져올 때
EX)주민등록번호
3단계:HATEOAS 원칙 준수
HATEOAS:Hypertext As The Engine Of Application State
->하이퍼 미디어 컨트롤을 적용, 2단계와 동일하지만 응답에는 리소스의 URI를 포함한 링크 요소를 삽입하여 작성
새로운 링크를 넣어 새로운 기능에 접근할 수 있도록 하는 것이 3단계의 핵심포인트
=>총 4단계
2단계까지만 적용해도 좋은 API라 볼 수 있고 이런 경우를 HTTP API라고 함.
<REST 아키텍처 6가지 제한 조건>
-인터페이스 일관성 : 일관적인 인터페이스로 분리
-무상태(stateless): 각 요청 간 클라이언트의 콘텍스트 서버에 저장되어서는 안됨
-캐시 처리 가능(casheable):WWW에서와 같이 클라이언트는 응답을 캐싱할 수 있어야 함
-계층화(Layered system): 클라이언트는 보통 대상 서버에 직접 연결되었는지, 또는 중간 서버를 통해 연결되었는지 알 수 없음. 중간 서버는 로드 밸런싱 기능이나 공유 캐시 기능을 제공함으로써 시스템 규모 확장성을 향상시키는 데 유용
-code on demand (optional): 자바 애플릿이나 자바스크립트의 제공을 통해 서버가 클라이언트가 실행시킬 수 있는 로직을 전송하여 기능을 확장시킬 수 있음
-클라이언트/서버 구조: 아키텍처를 단순화시키고 작은 단위로 분리함으로써 클라이언트-서버의 각 파트가 독립적으로 개선 될 수 있도록 해줌
Open API
:공공데이터에 쉽게 접근할 수 있도록 정부에서 제공하는 공공데이터
-무제한으로 이용할 수 있다는 것은 X , API 마다 정해진 이용 수칙과 제한사항이 있음.
API Key
:서버의 문을 여는 열쇠, API를 이용하기 위해 필요.
->서버를 운용하는 데에 비용이 발생하기 때문에 서버 입장에서 아무런 조건 없이 익명의 클라이언트에게 데이터를 제공할 의무는 없음.
->API Key가 필요한 경우, 로그인한 이용자에게 자원에 접근할 수 있는 권한을 API Key의 형태로 제공하고, 데이터를 요청할 때 API Key를 같이 전달해야 원하는 응답을 받을 수 있음