API(Application Programming Interface)???
- 소프트웨어 프로그램(애플리케이션) 내부에 존재하는 기능 및 규칙의 집합
- API는 소프트웨어를 통해 상호작용이 가능하기에, API는 API를 제공하는 애플리케이션과 서드파티 소프트웨어 및 하드웨어 등 사이의 간단한 커뮤니케이션 계약
- 역할
- API는 서버와 데이터베이스에 대한 출입구 역할을 한다.
- API는 애플리케이션과 기기가 원활하게 통신할 수 있도록 한다.
- API는 모든 접속을 표준화한다.
리소스 원형
- 도큐먼트(Document) : 객체 인스턴스나 데이터베이스 레코드와 유사한 개념
- 컬렉션(Colllection) : 서버에서 관리하는 디렉터리라는 리소스
- 스토어(Store) : 클라이언트에서 관리하는 리소스 저장소
GET /Member/1 -> GET /members/1
GET /members/delete/1 -> GET /members/1
GET /member/show/1 -> GET /member/1
route: POST /student
route: DELETE /student/12
슬래시 구분자(/)는 계층 관계를 나타내는데 사용한다.
http://restapi.example.com/houses/apartments http://restapi.example.com/animals/mammals/whales
URI 마지막 문자로 슬래시(/)를 포함하지 않는다.
http://restapi.example.com/houses/apartments/ (X) http://restapi.example.com/houses/apartments (0)
하이픈(-)은 URI 가독성을 높이는데 사용
밑줄(_)은 URI에 사용하지 않음
URI 경로에는 소문자
파일 확장자는 URI에 포함하지 않음
http://restapi.example.com/members/soccer/345/photo.jpg (X)
GET / members/soccer/345/photo HTTP/1.1 Host: restapi.example.com Accept: image/jpg (O)
REST 리소스 간에는 연관 관계가 있을 수 있고, 이런 경우 다음과 같은 표현방법으로 사용
/리소스명/리소스 ID/관계가 있는 다른 리소스명
GET : /users/{userid}/devices (일반적으로 소유 ‘has’의 관계를 표현할 때)
관계명이 복잡하다면 이를 서브 리소스에 명시적으로 표현
GET : /users/{userid}/likes/devices (관계명이 애매하거나 구체적 표현이 필요할 때)
http:// restapi.example.com/sports/soccer
http:// restapi.example.com/sports/soccer/players/13
위의 URI는 sports, players 컬렉션과 soccer, 13(13번인 선수)를 의미하는 도큐먼트로 표현됨
중요한 점은 컬렉션은 복수로 사용하고 있다는 점
직관적인 REST API를 위해서는 컬렉션과 도큐먼트를 사용할 때 단수 복수도 지켜준다면 좀 더 이해하기 쉬운 URI를 설계할 수 있다.
- 잘 설계된 REST API는 URI만 잘 설계된 것이 아닌 그 리소스에 대한 응답을 잘 내어주는 것까지 포함되어야함.
- 정확한 응답의 상태코드만으로도 많은 정보를 전달할 수가 있기 때문에 응답의 상태코드 값을 명확히 돌려주는 것은 생각보다 중요하다.
200 : 클라이언트의 요청을 정상적으로 수행함
201 : 클라이언트가 어떠한 리소스 생성을 요청, 해당 리소스가 성공적으로 생성됨(POST를 통한 리소스 생성 작업 시)
301 : 클라이언트가 요청한 리소스에 대한 URI가 변경 되었을 때 사용하는 응답 코드 (응답 시 Location header에 변경된 URI를 적어 줘야 합니다.)
400 : 클라이언트의 요청이 부적절 할 경우 사용하는 응답 코드
401 : 클라이언트가 인증되지 않은 상태에서 보호된 리소스를 요청했을 때 사용하는 응답 코드 (로그인 하지 않은 유저가 로그인 했을 때, 요청 가능한 리소스를 요청했을 때)
403 : 유저 인증상태와 관계 없이 응답하고 싶지 않은 리소스를 클라이언트가 요청했을 때 사용하는 응답 코드 (403 보다는 400이나 404를 사용할 것을 권고. 403 자체가 리소스가 존재한다는 뜻이기 때문에)
405 : 클라이언트가 요청한 리소스에서는 사용 불가능한 Method를 이용했을 경우 사용하는 응답 코드
500 : 서버에 문제가 있을 경우 사용하는 응답 코드