API
API(Application Programming Interface) : 응용 프로그래밍 인터페이스
소프트웨어 프로그램이 다른 소프트웨어 프로그램으로 데이터를 전송할 수 있도록 하는 일련의 규칙.
REST API
REST(Representational State Transfer)
- 웹에서 사용되는 데이터나 자원(리소스)를 HTTP URI로 표현
- 리소스에 대한 행위는 HTTP 메서드로 정의한다.
- 보다 RESTful한 API란 리소스와 메서드만으로 무엇을 하는지 알 수 있도록 하는 것을 말한다.
- 리소스는 명사형을 추구한다. (create_member (x), members(o))
REST API 성숙도 모델
총 4단계로 이루어져 있으나 이것을 다 지키기는 매우매우 어려움! 이렇게 하려고 노력해야 하지만 완벽하게 하기는 어렵다.
-
0단계 : 단순 HTTP 프로토콜 사용. 해당 단계만으로는 REST API라고는 할 수 없다.
-
1단계 : 개별 리소스와의 통신을 준수. 개별 리소스에 맞는 엔드포인트를 사용해야 하며, 요청하고 받은 자원에 대한 정보를 응답으로 전달해야 한다.
엔드포인트 : 요청을 받아 응답을 제공하는 서비스를 사용할 수 있는 지점
ex) 회원을 추가하려 한다 -> 엔드포인트 : /members
-
2단계 : CRUD에 맞게 적절한 HTTP 메서드를 사용하는 것.
-
3단계 : HATEOAS(Hypertext As The Engine Of Application State)라는 약어로 표현되는 하이퍼미디어 컨트롤을 적용한다.
- 요청은 2단계와 동일하지만, 응답에는 리소스의 URI를 포함한 링크 요소를 삽입하여 작성한다.
CRUD
CREATE
- POST : 지정된 리소스를 제출하여 서버에 저장한다.
READ
- GET : 서버의 저장된 특정 정보를 불러온다. (BODY X)
UPDATE
- PUT : 서버의 저장된 정보를 교체한다. (전체적으로)
- PATCH : 서버의 저장된 정보를 수정한다. (부분적으로)
DELETE
- DELETE : 서버에 저장된 정보를 삭제한다.
HTTP 메서드 더보기
추가적인 정보
- 무한 스크롤을 이용해 추가적인 정보를 불러올 경우 작성해야 할 엔드포인트는?
- GET /tweets?offset=10&limit=10
- 수백개의 정보를 한번에 응답받기에는 상당한 양의 payload가 전달되므로 페이지네이션을 이용해 정보의 목록을 끊어주는게 좋다.
- offset, limit는 query parameter로 사용된다.
- 특정 위치를 기반으로 한 모든 식당의 목록에서 한식만 필터링하는 엔드포인트는?
- GET /restaurants?coordinate=126.9178889,37.5561619&type=korean
- 위치 기반으로 한 모든 식당을 찾으려면 중심이 될 좌표를 query parameter로 사용
- 해당 리소스의 필터링 조건을 query parameter로 전달하는 것이 바람직하며 한식임을 나타내기 위해 type=korean을 추가