API(Application Programming Interface).
API는 메뉴판이다. 메뉴판도 어느정도 규칙을 가지고 소통이 원활하게 깔끔하게 작성해야 한다.
웹 애플리케이션에서는 HTTP 메서드를 이용해 서버와 통신한다.
- GET
- POST
- PUT(or PATCH)
- DELETE
중구난방으로 API를 작성하는 것은 서로 소통이 불편하기 마련이다.
중구난방인 API 작성방법에 간단하고 일관적이고 사용이 간편한 네트워크 API 디자인 방법론을 제시하는 REST 작성방법.
Representational State Transfer의 약어.
웹에서 사용되는 데이터나 자원(Resoure)을 HTTP URI로 표현하고, HTTP 프로토콜을 통해 요청과 응답을 정의하는 방식
4단계 모델이 있다. 성숙도 모델이라고 부른다. 2단계까지만 적용해도 좋은 API 디자인이라고 볼 수 있다.
0단계는 HTTP만 사용하기만 해도된다. 하지만 이 API는 REST API라고 할 수 없다. REST API를 작성하기 위한 기본 단계.
모든 자원은 개별 리소스에 맞는 엔드포인트(Endpoint)를 사용해야하며 요청하고 받는 자원에 대한 정보를 전달해야 한다.
movie라는 개별 리소스에 맞는 엔트포인트를 사용한 예시
GET /movies // 영화 목록
GET /moives/{id} // 특정 영화 조회
POST /moives // 영화 생성
PUT /movies/{id} // 영화 수정
DELETE /movies/{id} // 영화 삭제
엔드포인트를 작성할때 동사 사용을 자제해야한다. 왜냐하면 GET, POST 등 HTTP 메서드가 이미 표현하기 때문이다.
요청된 리소스만 전달하는 것이 아니라 리소스 사용에 대한 성공 / 실패 여부를 반환한다.
CRUD에 적절한 HTTP 메서드를 사용하는 것에 중점을 둔다.
GET메서드: 서버의 데이터를 변화시키지 않는 요청에 사용해야 한다.POST메서드는 요청마다 새로운 리소스를 생성하고,PUT메서드는 요청마다 같은 리소스를 반환한다. 이렇게 매 요청마다 같은 리소스를 반환하는 특징을 멱등(idempotent)하다고 한다. 그렇기 때문에 멱등성을 가지는PUT메서드와 그렇지 않은POST메서드는 구분해서 사용해야한다.(GET, PUT, DELETE 등은 멱등성을 가진다.)PUT메서드와PATCH메서드도 구분하여 사용해야 한다.PUT은 교체,PATCH는 수정의 용도.
2단계랑 동일하지만 응답에 리소스의 URI를 포함한 링크 요소를 삽입하여 작성한다. 이 링크는 사용자 입장에서 다음 행동을 편하게 하기 위해 제공하는 리소스을 넣는 것은 원칙으로 한다.
예) 보고 싶은 영화의 시간을 요청해서 확인하게 되면 그 시간에 맞는 영화 예매 페이지 링크를 보내 줌.
공공데이터 형태로 모두에게 열려있는 API. 하지만 무제한으로 이용할 수 있다는 뜻은 아니다. API마다 이용 수칙이 있고 그마다 제한사항이 있을 수 있다.
API를 이용하기 위해서는 API Key가 필요하다. API Key가 필요한 경우에는 로그인한 이용자에게 자원을 접근할 수 있는 권한을 API Key의 형태로 제공하고 데이터를 요청할 때 API Key를 같이 전달해야 응답을 받을 수 있다.