
컴퓨터 공학에서 개념의 설계 , 컴퓨터 시스템의 하드웨어 구조를 말한다.
HTTP 통신에서 어떤 자원에 대한 CRUD 요청을 Resource와 Method로 표현하여 특정한 형태로 전달하는 방식
REST : Representational State Transfer 라는 용어의 약자로서 2000년도에 로이 필딩의 박사학위 논문에서 최초로 소개되었습니다. 로이 필딩은 HTTP의 주요 저자 중 한 사람으로 그 당시 웹(HTTP) 설계의 우수성에 비해 제대로 사용되어지지 못하는 모습을 안타까워하며 웹의 장점을 최대한 활용할 수 있는 아키텍처로 REST를 발표했다고 합니다.
- 자원(resuorce) - URI
서버는 Unique한 ID를 가지는 Resource를 가지고 있으며, 클라이언트는 이러한 Resource에 요청을 보냅니다. 이러한 Resource는 URI 에 해당합니다.- 행위(Verb) - HTTP METHOD
- 표현(Representations of Resource)
클라이언트와 서버가 데이털르 주고받는 형태 json, xml, text, rss 최근에는 key, value를 활용하는 json을 주로 사용합니다.
1. Uniform (유티폼 인터페이스)
Uniform Interface는 URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍처 스타일을 말합니다.
2. Statless(무상태성)
REST는 무상태성 성격을 갖습니다. 다시 말해 작업을 위한 상태정보를 따로 지정하고 관리하지 않습니다. 세션 정보나 쿠키정보를 별도로 저정하고 관리하지 않기 때문에 API 서버는 들어오는 요청만을 단순히 처리하면 됩니다. 때문에 서비스의 자유도가 높아지고 서버에서 불필요한 정보를 관리하지 않음으로써 구현이 단순해집니다.
3. Cachable(캐시 기능)
WWW에서와 같이 클라이언트는 응답을 캐싱할 수 있어야한다.
4. Self-decriptiveness(자체 표현 구조)
REST API는 요청 메세지만 보고도 이를 쉽게 이해할 수 있는 자체 표현 구조로 되어있습니다.
ex) DELETE /product/1 : 1번 product 상품을 삭제하세요5. Client- Server 구조
아키텍처를 단순화시키고 작은 단위로 분리함으로써 클라이언트-서버의 각 파트가 독립적으로 개선 될수 있도록 해준다.
6. 계층형 구조
Rest API의 서버는 다중 계층으로 구성될 수 있으며 보안, 로드 밸런싱, 암호화 등을 위한 계층을 추가하여 구조를 변경할 수 있습니다. 또한 Proxy, Gateway와 같은 네트워크 기반의 중간매체를 사용할 수 있게 해줍니다. 하지만 클라이언트는 서버와 직접 통신하는지, 중간 서버와 통신하는지 알 수 없습니다.
❗️GraphQL ?
1️⃣ URI는 정보의 자원을 표현해야 한다.
2️⃣ 자원에 대한 행위는 HTTP Method (GET POST PUT DELETE) 로 표현한다.
3️⃣ 행위에 대한 표현이 들어가기보단 리소스명은 동사보단 명사를 사용한다.
ex)
❌ GET product/delete/1
❌ GET proudct/show/1 리소스명은 동사보다 명사를 사용
⭕️ DELETE /product/1
- POST : POST를 통해 해당 URI를 요청하면 리소스 생성합니다.
- GET : GET를 통해 해당 리소스를 조회합니다. 리소스를 조회하고 해당 도큐먼트에 대한 자세한 정보를 가져온다.
- PUT : PUT를 통해 해당 리소스를 수정합니다.
- DELETE : DELETE를 통해 리소스를 삭제합니다.
200 : 클라이언트의 요청 정상적으로 수행함
201 : 클라이언트가 어떠한 리소스 생성을 요청, 해당 리소스가 성공적으로 생성됨(POST)
400 : 클라이언트의 요청잉 부적절 할 경우 사용하는 응답 코드
401 : 클라이언트가 인증되지 않은 상태에서 보호된 리소스를 요청했을 때 사용하는 코드
403 : 유저 인증상태와 관계 없이 응답하고 싶지 않은 리소스를 클라이언트가 요청했을 때 사용하는 코드
405 : 클라이언트가 요청한 리소스에서는 사용 불가능한 Method를 이용했을 경우 사용하는 응답 코드
500 : 서버에 문제가 있을 경우 사용하는 응답 코드