728x90
API란?
- Application Programming Interface의 약자
- 애플리케이션 소프트웨어를 빌드하고 통합하기 위한 정의 및 프로토콜 세트인 애플리케이션 프로그래밍 인터페이스를 뜻한다
- 즉, 응용 프로그램에서 사용할 수 있도록 다른 응용 프로그램을 제어할 수 있게 만든 인터페이스를 뜻한다
- API는 프론트엔드와 백엔드가 데이터를 주고 받기 위한 대표적인 방법이다
- 따라서 API를 사용하면 내부 구현 로직을 알지 못해도 정의되어 있는 기능을 쉽게 사용할 수 있다
💡인터페이스 : 어떤 장치 간 정보를 교환하기 위한 수단이나 방법
REST 란?
- Representational State Transfer 의 약자
- 자원(resource)의 표현(representation)에 의한 상태 전달
- HTTP 프로토콜을 통해 API를 설계하기 위한 아키텍처 스타일로, 일종의 규칙을 의미한다
- HTTP URI(Uniform Resource Identifier)를 통해 자원을 명시하고, HTTP Method를 통해 자원을 교환하는 것을 말한다
- REST의 구성 요소
- 자원 (Resource) : URI
- 행위 (Verb) : HTTP Method
- 표현 (Representation) : 데이터를 주고받는 형태
- 즉, REST는 URI를 통해 자원을 표시하고, HTTP Method를 이용하여 해당 자원의 행위를 정해주며, 그 결과를 받는다
REST의 특징
- Server-Client 구조
- 자원이 있는 쪽이 Server, 요청하는 쪽이 Client가 된다
- 클라이언트와 서버가 독립적으로 분리되어 있어 서로간의 의존성이 적다
- Stateless (무상태)
- 요청 간에 클라이언트 정보가 서버에 저장되지 않는다
- 서버는 각각의 요청을 완전히 별개의 것으로 인식하고 처리한다
- Cacheable (캐시 처리 기능)
- HTTP의 특징인 캐싱 기능을 적용했다
- 대량의 요청을 효율적으로 처리하기 위해 캐시를 사용한다
- Layered System (계층 구조)
- 클라이언트는 서버의 구성과 상관 없이 REST API 서버로 요청하면 된다
- 서버는 다중 계층으로 구성될 수 있다
- ex) 로드 밸런싱, 보안 요소, 캐시 등
- Uniform Interface (인터페이스 일관성)
- 정보가 표준 형식으로 전송되기 위해 구성 요소 간 통합 인터페이스를 제공한다
- HTTP 프로토콜을 따르는 모든 플랫폼에서 사용하게끔 설계되어 있다
- 즉, 특정 언어나 기술에 종속되지 않는다!
- Self-Description (자체 표현)
- 요청 메시지만 보고도 쉽게 이해할 수 있는 자체 표현 구조이다
- Code on Demand (Optional)
- 요청을 받으면 서버에서 클라이언트도 코드 또는 스크립트(로직)를 전달하여 클라이언트 기능을 확장한다
REST API 란?
- REST 아키텍처의 제약 조건을 준수하는 웹 API를 말한다
- 즉, REST 하게 구현된 API로, RESTful API라고도 부른다
- RESTful 웹 API에는 공식적인 표준은 없다
- REST API 의 작동 방식
- REST API는 HTTP 요청을 통해 통신하여 데이터 생성, 읽기, 업데이트 및 삭제 기능을 완료한다 (CRUD)
- POST - 리소스 생성 (Create)
- GET - 리소스 가져오기 (Read)
- PUT - 리소스 업데이트 (Update)
- DELETE - 리소스 삭제 (Delete)
REST API 특징
- REST API의 가장 큰 특징은 각 요청이 어떤 동작이나 정보를 위한 것인지 그 요청의 모습 자체로 추론이 가능하다는 것이다!
- REST 기반으로 시스템을 분산하여 확장성과 재사용성을 높인다
- HTTP 표준을 따르고 있어 여러 프로그래밍 언어로 구현할 수 있다
REST API 설계 규칙
1. URI는 정보의 자원을 표현해야 한다
- 자원의 이름은 동사보다는 명사를 사용한다
- URI는 자원을 표현하는데 중점을 두어야하기 때문에 행위에 대한 표현이 들어가면 안된다
- 즉, URI에는 HTTP Method와 행위에 대한 동사 표현이 들어가면 안된다!
GET /users/123
2. 자원에 대한 행위는 HTTP Method로 표현한다
- URI에 자원의 행위에 대한 표현이 들어가지 않는 대신 HTTP Method를 사용한다
GET /users/123 // 123번 유저의 정보 가져오기
DELETE /users/123 // 123번 유저 정보 삭제하기
POST /users // ,새로운 유저 생성
3. 슬래시(/)는 계층 관계를 나타내는데 사용한다
http://restapi.test.com/users/rooms
http://restapi.test.com/users/board
4. URI 마지막은 슬래시(/)를 사용하지 않는다
http://restapi.test.com/users/rooms/ [X]
http://restapi.test.com/users/rooms [O]
5. 하이픈(-)은 URI의 가독성을 높이는데 사용한다
- 불가피하게 긴 URI를 사용하게 될 경우 하이픈을 이용하여 가독성을 높인다
6. 언더바(_) 혹은 밑줄은 URI에 사용하지 않는다
- 밑줄은 보기 어렵거나 밑줄 때문에 문자가 가려지기도 한다
- 따라서 언더바 대신 하이픈을 사용한다
7. URI는 경로에는 소문자가 적합하다
- URI는 경로에는 대문자 사용을 피해야 한다
- 대소문자에 따라 각각 다른 리소스로 인식하기 때문이다!
8. 파일 확장자는 URI에 포함하지 않는다
- REST API에서는 메시지 바디 내용의 포맷을 나타내기 위한 파일 확장자를 URI 안에 포함시키지 않는다
- Accept header를 사용한다
💡 REST와 HTTP의 차이
- HTTP는 통신에 사용되는 응용 프로그램 프로토콜이고, REST는 일종으의 규칙이다
- REST는 HTTP 기반으로 사용되는 통신 방식이다!
💡 REST API와 HTTP API의 차이
- 사실상 HTTP API와 REST API는 거의 같은 의미로 사용되지만, 디테일하게 보면 다르다
- HTTP API는 HTTP를 사용하여 서로 정해둔 스펙으로 통신하는 것이고, 보다 넓은 의미로 사용된다
- REST API는 HTTP API에 여러가지 제약 조건이 추가된 것이다!
- REST API의 제약조건
- 자원의 식별
- 메시지를 통한 리소스 조작
- 자기 서술적 메시지
- 애플리케이션의 상태에 대한 엔진으로서 하이퍼미디어
참고 자료
https://www.redhat.com/ko/topics/api/what-are-application-programming-interfaces
https://unequaled-peach-7e5.notion.site/REST-API-fcf5290aefb94b27851f03fdf724083d
https://dev-coco.tistory.com/97
728x90
'야미스터디 > Network' 카테고리의 다른 글
[Network] HTTP 1, 2, 3 📌 (0) | 2022.09.12 |
---|---|
[Network] cast 📌 (0) | 2022.09.02 |
[Network] Cookie vs Session 📌 (0) | 2022.08.04 |
얄팍한 코딩사전 - REST API가 뭔가요? (0) | 2021.07.31 |
HTTP 완벽 가이드 - 1 (0) | 2020.12.25 |
댓글