- API란 클라이언트가 리소스를 요청할 수 있도록 서버측에서 제공된 인터페이스를 말한다.
- 이러한 API로 데이터와 기능의 집합을 제공하여 컴퓨터 프로그램간 상호작용을 촉진하며, 서로 정보를 교환가능 하도록 한다.
- 서버를 개발한다는 것은 API에 대한 마스터 권한이 생기는 것이다.
- API와 함께 항상 메뉴얼도 제공되어야 한다.
- URL를 모르면 클라이언트는 사용할 수 없다.
REST에 대해서는 이전 블로그에서 확인 가능하다. -> Link
- REST 기반으로 서비스 API를 구현하는 것을 의미한다.
- 최근 OpenAPI(누구나 사용할 수 있도록 공개된 API), 마이크로 서비스(하나의 큰 애플리케이션을 여러 개의 작은 애플리케이션으로 쪼개어 변경과 조합이 가능하도록 만든 아키텍처) 등을 제공하는 업체 대부분은 REST API를 제공한다.
- 사내 시스템들도 REST 기반으로 시스템을 분산해 확장성과 재사용성을 높여 유지보수 및 운용을 편리하게 할 수 있다.
- REST는 HTTP 표준을 기반으로 구현하므로, HTTP를 지원하는 프로그램 언어로 클라이언트, 서버를 구현할 수 있다.
- 즉, REST API를 제작하면 델파이 클라이언트 뿐 아니라, JAVA, C#, 웹 등을 이용해 클라이언트를 제작할 수 있다.
URL은 정보의 자원을 표현해야 한다.
- resource는 동사보다는 명사를, 대문자 보다는 소문자를 사용한다.
- resource의 도큐먼트 이름으로는 단수 명사를 사용해야 한다.
- resource의 컬렌션 이름으로는 복수 명사를 사용해야 한다.
- resource의 스토어 이름으로는 복수 명사를 사용해야 한다.
예로 들면 GET/Member/1 -> GET/members/1 를 말한다.
자원에 대한 행위는 HTTP Method(GET, PUT, POST, DELETE 등)로 표현한다.
- URL에 HTTP Method가 들어가면 안된다.
예로 들면 GET/members/deletd/1 -> DELETE/members/1 를 말한다.
- URL에 행위에 대한 동사 표현이 들어가면 안되는데 즉, CRUD 기능을 나타내는 것은 URL에 사용하지 않는다.
예로 들면 GET/members/show/1 -> GET/members/1 혹은 GET/members/insert/1 -> POST/members/2 를 말한다.
- 경로 부분 중 변화하는 부분은 유일한 값으로 대체하는데 즉, id는 하나의 특정 resource를 나타내는 고유값이다.
예로 들면 student를 생성하는 route는 POST/students 이고 id가 12인 student를 삭제하는 route는 DELETE/students/12를 말한다.
POST, GET, PUT, DELETE 이 4가지의 Method를 가지고 CRUD를 할 수 있다.
Method | 역할 |
---|---|
POST | POST를 통해 해당 URL를 요청하면 리소스를 생성합니다. |
GET | GET을 통해 해당 리소스를 조회하고 해당 도큐먼트에 대한 자세한 정보를 가져옵니다. |
PUT | PUT을 통해 해당 리소스를 수정합니다. |
DELETE | DELETE를 통해 리소스를 삭제합니다. |
예로 들면 http://restapi.example.com/blog/dex 를 말한다
- URL에 포함되는 모든 글자는 리소스의 유일한 식별자로 사용되어야 하며, URL이 다르다는 것은 리소스가 다르다는 것이고, 역으로 리소스가 다르면 URL도 달라져야 한다.
- REST API는 분명한 URL를 만들어 통신을 해야 하기 때문에 혼동을 주지 않도록 URL 경로의 마지막에는 슬래시(/)를 사용하지 않는다.
- 불가피하게 긴 URL 경로를 사용하게 된다면 하이픈을 사용해 가독성을 높여준다.
- 밑줄은 보기 어렵거나 밑줄 때문에 문자가 가려지기도 하므로 가독성을 위해 밑줄은 사용하지 않는다.
- URL 경로에 대문자 사용은 피하도록 한다.
- PFC 3986(URL 문법 형식)은 URL 스키마와 호스트를 제외하고는 대소문자를 구별하도록 규정하기 때문이다.
- REST API에서는 메시지 바디 내용의 포맷을 나타내기 위한 파일 확장자를 URL안에 포함시키지 않는다.
- Access header를 사용한다.
예로 들면 http://restapi.example.com/blog/dex.jpg 이렇게는 사용하지 않는다.
- /리소스명/리소스ID/관계가 있는 다른 리소스명
예로 들면 GET : /users/{userid}/devices (일반적으로 소유 ‘has’의 관계를 표현할 때)
코드 | 의미 |
---|---|
1XX | 전송 프로토콜 수준의 정보 교환 |
2XX | 클라이언트 요청이 성공적으로 수행됨 |
3XX | 클라이언트는 요청을 완료하기 위해 추가적인 행동을 취해야 함 |
4XX | 클라이언트의 잘못된 요청 |
5XX | 서버쪽 오류로 인한 상태코드 |