안녕하세요. REST API에 대해 공부하면서 포스팅해보려고 합니다.
먼저 REST API를 알기 전에 HTTP 프로토콜에 대한 개념을 설명하려고 합니다.
HTTP (HyperText Transfer Protocol) 란?
- 클라이언트와 서버가 요청을 하고 응답을 하기 위해 따르는 프로토콜.
- HTML 문서, 이미지, 동영상, 오디오, 텍스트 문서 등을 주고받을 수 있음.
HTTP 특징
- HTTP 프로토콜은 기본적으로 클라이언트의 요청(request) 응답(response)로 구현됨.
- 서버에 요청을 하고 응답을 받으면 서버와의 통신이 끊기게 됨.
- HTTP는 비연결형 프로토콜이라고 한다.
장점
- 프로토콜을 직관적으로 이해하기 쉽고, 구현이 단순함
- 클라이언트의 요청에 대한 처리 결과를 응답으로 전송하고 나면 접속이 종료되기 떄문에 더 많은 클라이언트의 요청을 처리할 수 있다.
단점
- 각 클라이언트 요청마다 새로운 접속이 이루어지기 떄문에 서버 측에 네트워크 자원의 낭비가 적지만, 새로운 접속을 맺기 위해 발생하는 오버헤드 즉, 수행 속도의 감소가 지속적으로 발생
- 동일한 클라이언트가 접속하더라도, 이전의 정보가 남아있지 않아서 클라이언트의 정보에 대한 비교가 불가능
HTTP 메소드 (대표적인 4가지)
- GET : 정보를 요청하기 위해 사용(Read)
- POST : 정보를 입력하기 위해 사용(Create)
- PUT : 정보를 업데이트하기 위해 사용(Update)
- DELETE : 정보를 삭제하기 위해 사용(Delete)
REST (REpresentational State Transfer)
REST (Representational state transfer)는 소프트웨어 프로그램 아키텍처의 한 형식 자세히 말하면 HTTP의 장점을 최대한 활용할 수 있는 아키텍처가 REST입니다.
(HTTP 기반으로 필요한 자원에 접근하는 방식을 정해놓은 아키텍처 스타일입니다.)
REST 구성
- 자원(Resource) - URL
- 행위(Verb) - HTTP 메서드
- 표현(Representations)
REST 특징
1. 클라이언트 / 서버 구조 (Client - Server)
- 일관적인 인터페이스로 분리되어야 한다. (클라이언트(React, Vue~)와 서버(REST API)가 하는 역할이 구분)
2. 무상 태성 (Stateless)
- 상태를 유지하지 않음. (위에서 설명한 HTTP 프로토콜 특징)
3. 캐시 처리 가능 (Cacheable)
- 웹에서와 같이 클라이언트는 응답을 캐싱할 수 있어야 한다.
4. 자체 표현 구조 (Self-descriptiveness)
- REST API 메시지(리턴 값)만 보고도 쉽게 이해할 수 있는 자체 표현의 구조로 되어 있다.
5. 계층화 시스템 (Layered System)
- 계층형 시스템 구조가 되어야 한다. (서버에서 proxy, gateway, 암호화 등의 기능들을 사용해도 클라이언트는 몰라야 한다.
6. 유니폼 인터페이스 (Uniform Interface)
- HTTP 표준에만 따른다면 모든 플랫폼에서 사용이 가능하다.
REST API URL 규칙
1. URI 경로에서 소문자를 선호해야 합니다.
http://api.example.com/my-folder/my-doc
2. 후행 슬래시 (/)는 URI에 포함하지 않아야 합니다.
http://api.canvas.com/shapes/ (X)
http://api.canvas.com/shapes (O)
3. 계층 관계를 나타내려면 슬래시 구분 기호 (/)를 사용해야 합니다.
http://api.canvas.com/shapes/polygons/quadrilaterals/squares
http://api.canvas.com/모양/다각형/사변형/사각형
4. URI의 가독성을 높이려면 하이픈 (-)을 사용해야 합니다.
http://api.example.com/blogs/guy-levin/posts/this-is-my-first-post
5. 밑줄 (_)은 URI에 사용해서는 안됩니다.
6. 파일 확장자는 URI에 포함하지 않아야 합니다.
http://api.college.com/students/3248234/courses/2005/fall.json (X)
http://api.college.com/students/3248234/courses/2005/fall (O)
'n년차 개발자' 카테고리의 다른 글
27인치 모니터 추천(27Q3 AHIPS 리얼 AdobeRGB 미인) (0) | 2020.02.26 |
---|---|
meta X-UA-Compatible, IE 버전별로 css 적용하기 (0) | 2020.02.20 |
크로스 브라우징 Cross Browsing 이란? (0) | 2020.02.20 |
WBS란? 작업 분할 구조 (0) | 2020.01.10 |
쿠버네티스 (kubernetes) 란 (0) | 2019.12.11 |