Application Programming Interface
클라이언트-서버 간의 약속
클라이언트가 정한 대로 서버에게 요청(Request)을 보내면, 서버가 요구사항을 처리하여 응답(Response)을 반환함
Representational State Transfer (=RESTful API)
웹 데이터 전송 방식 중 하나
웹에 존재하는 모든 자원에 고유한 이름(URI)를 부여하여 해당 자원에 대한 주소를 부여하는 것. 해당 자원의 상태를 주고 받는다.
URI
: Uniform Resource Identifier = 통합 자원 식별자
웹 서비스를 만드는 데에 사용되는 REST 아키텍처의 제약조건을 모두 만족해서 만들면 RESTful하다고 말할 수 있다.
👉🏻 제약조건 및 RESTful한 API 동작 방식
- HTTP URI를 통해 자원(Resource)을 명시하고
- HTTP METHOD (GET, POST, PUT/PATCH, DELETE)를 통해
- 해당 자원(URI)에 대한 CRUD Operation을 적용하는 것
+. 필요한 정보와 status code를 client server로 응답 보냄
응답 상태 코드 (Status Code)
- 1xx : 전송 프로토콜 수준의 정보 교환
- 2xx : 클라어인트 요청이 성공적으로 수행됨
- 3xx : 클라이언트는 요청을 완료하기 위해 추가적인 행동을 취해야 함
- 4xx : 클라이언트의 잘못된 요청
- 5xx : 서버쪽 오류로 인한 상태코드
💡 REST vs RESTful
RESTful = REST의 설계규칙을 잘 지켜서 설계된 API를 RESTful하다고 한다. 즉, REST의 원리를 잘 지키는 시스템이라는 뜻!
- 이해하기 쉽고 사용하기 쉬운 REST API를 만드는 것이 목적
- 만약 성능이 중요한 상황이라면 굳이 RESTful한 것에만 집중하지 않아도 됨
URI에 들어가는 명사들은 복수형을 사용한다.
/post
(X)
URI에는 가급적 사용하지 않는다.
/accounts/edit
(X)
슬래시(/)로 계층관계를 표현한다.
URL 마지막 문자로 슬래시(/)를 포함하지 않는다.
언더바(_)를 사용하지 않고, 하이픈(-)을 사용한다.
URI는 소문자로만 구성한다.
HTTP 응답 상태코드를 사용한다.
파일 확장자는 URI에 포함하지 않는다.
https://velog.velcdn.com/images/sw_smj.jpg
(X)
HTTP 프로토콜의 인프라를 그대로 사용 ➡ REST API 사용을 위한 별도의 인프라 구축 불필요
HTTP 프로토콜의 표준을 최대한 활용 ➡ 여러 추가 장점을 함께 가져갈 수 있도록 함
HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용 가능
Hypermedia API의 기본을 충실히 지키면서 범용성 보장
REST API 메시지가 의도하는 바를 명확히 나타냄 ➡ 의도하는 바를 쉽게 파악 가능
여러 가지 서비스 디자인에서 생길 수 있는 문제 최소화
서버-클라이언트의 역할을 명확히 분리
표준이 자체적으로 존재하지 않아 정의가 필요함
사용할 수 있는 메소드가 4가지밖에 없음
HTTP Method 형태가 제한적임
브라우저를 통해 테스트할 일이 많은 서비스라면, 쉽게 고칠 수 있는 URL보다 Header 정보의 값을 처리해야 함 ➡ 전문성이 요구됨
구형 브라우저에서 호환 되지 않음 ➡ 지원해주지 못하는 동작이 많음
참고자료