REST
- Representational State Transfer
- 자원을 이름으로 구분하여 해당 자원의 상태(정보)를 주고 받는 모든 것
- 자원 : 해당 소프트웨어가 관리하는 모든 것 (문서, 데이터 ...)
- 상태(정보) 전달
- 데이터가 요청되어지는 시점에서 자원의 상태(정보)를 전달합니다.
- 주로 JSON 또는 XML을 통해 데이터를 주고 받습니다.
- www 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 개발 아키텍쳐의 한 형식으로 웹의 기존 기술과 HTTP 프로토콜을 그대로 활용하므로 웹의 장점을 활용할 수 있는 아키텍쳐 스타일입니다.
- HTTP URI (Uniform Resource Identifier) 를 통해 자원 (Resource) 을 명시하고, HTTP Method (POST, GET, PUT, DELETE) 를 통해 해당 자원에 대한 CRUD Operation을 적용하는 것을 의미합니다.
REST 구성 요소
1. 자원 (Resource) : HTTP URI
2. 행위 (Verb) : HTTP Method
3. 표현 (Representation of Resource) : HTTP Message Payload
API
- Application Programming Interface
- 다른 소프트웨어 시스템과 통신하기 위해 따라야 하는 규칙을 정의
- 웹 API는 클라이언트와 웹 리소스 사이의 게이트웨이라고 생각할 수 있습니다.
- 클라이언트 : 웹에서 정보에 액세스하려는 사용자, API를 사용하는 사람이나 시스템
- 리소스 : 애플리케이션(서버)이 클라이언트에게 제공하는 데이터
- 조직은 API를 사용하여 리소스를 공유하고 보안, 제어, 인증을 유지하면서 웹 서비스를 제공
REST API
- REST 기반으로 API를 구현한 것
REST 성숙도 모델
- 총 4단계로 이루어져 있으며 단계가 올라갈수록 REST API에 가까워집니다.
- Level 0
- HTTP 프로토콜을 원격 호출을 위한 전송 시스템으로 사용하는 경우
- Level 1 : Resources
- 모든 요청을 하나의 End-point로 보내는 것이 아니라 개별 리소스와 통신
- Level 2 : HTTP Verbs
- HTTP Method를 사용해서 CRUD를 표현하고 응답 상태코드도 활용하여 반환
- 대다수의 REST API가 이 단계에 해당
- Level 3 : Hypermedia Controls
- API 서비스의 모든 End-point를 최초 진입점이 되는 URI를 통해 Hypertext Link 형태로 제공
- 다음 Request에 필요한 End-point를 추가적으로 제공
Endpoint??
- 서비스를 사용 가능하도록 하는 서비스에서 제공하는 커뮤니케이션 채널의 한쪽 끝
- 요청을 받아 응답을 제공하는 서비스를 사용할 수 있는 지점
REST API 설계 규칙
- URI는 동사보다 명사, 대문자보다 소문자를 사용
- URI 마지막에 슬래시(/)를 포함하지 않습니다.
- 언더바(_) 대신 하이픈(-) 사용
- 파일확장자(.jpg ...)는 URI에 포함하지 않습니다.
- URI에 HTTP Method를 포함하지 않습니다.
RESTful API
- REST의 설계 규칙을 지켜서 설계된 API를 RESTful한 API라고 합니다.
- REST의 원리를 따르는 시스템을 RESTful 하다고 표현
Open API
- 누구나 사용할 수 있도록 공개된 API
- 지도, SNS, 음악, 공공데이터, 날씨 등 다양한 분야에서 사용가능
- Open API 서비스를 이용하기 위해서는 공개키를 발급 받아야 합니다.
API Key
- API 서비스를 사용하려면 서비스 제공자에게 사용자 인증을 하고 API Key를 발급받아야 합니다.
- 사용자는 요청을 받을 때마다 API Key를 같이 전송을 하고, 서버는 해당 API Key가 유효한지 확인하고 API 사용을 인가합니다.
참고 :
https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html
https://aws.amazon.com/ko/what-is/restful-api/
https://jaehoney.tistory.com/176
https://toneyparky.tistory.com/6
https://dev-coco.tistory.com/97
https://jay-choe.tistory.com/5
'Web' 카테고리의 다른 글
[JavaScript] 비동기 처리 asynchronous programming (0) | 2022.09.26 |
---|---|
[JavaScript] 프로토타입 (0) | 2022.09.22 |
[JavaScript] 객체 지향 (0) | 2022.09.22 |
[JavaScript] 고차 함수, 내장 고차 함수 (0) | 2022.09.20 |
[JavaScript] 원시 타입(Primitive Type)과 참조 타입(Reference Type) (0) | 2022.09.06 |