회사에서 맡게 될 업무에서 REST API를 활용할 것 같아서 미리 이론들을 학습해보고자 한다.
REST API는 REST 아키텍처 스타일의 설계 원칙을 준수하는 API이다.
REST와 API를 나눠서 살펴보면,
REST: Representational State Transfer의 약자로, 자원을 명시해서 자원의 상태를 주고 받는 것을 의미
API: 컴퓨터의 기능을 실행시키는 방법을 의미
REST API도 컴퓨터의 기능을 실행시키는 명령이지만, 남의 컴퓨터를 실행시킴.
특정 기술을 의미하는 것이 아니라 HTTP를 통해서 기계들이 통신할 때 HTTP가 가진 잠재력을 최대한 이용할 수 있도록 유도하기 위한 사례
REST API의 구성요소
- Resource: 데이터들
- Resource는 URI를 통해서 표현됨
- 데이터 전체를 식별하고 싶다면 Collection으로 표현
- 개별 데이터는 Element으로 표현
- Element가 모여서 Collection이 됨
- URI는 정보를 식별하는 이름일 뿐, 정보를 가공할 필요가 있으며, 가공 방법이 CRUD method
- REST API는 HTTP를 이용하기 때문에 HTTP가 가지고 있는 method를 이용함
정리하면,
REAT API는
1. HTTP를 통해서 자원( Resource )을 명시하고
2. HTTP Method ( POST, GET, PUT, DELETE, PATCH 등)를 통해서 CRUD 동작을 적용하는 것
" REAT API는 기계와 기계가 통신할 때
Resource는 URI로, 행위는 HTTP Method로, 결과는 응답 코드로 HTTP를 활용 "
※ CRUD Method
컴퓨터 소프트웨어가 갖는 기본적인 데이터 처리 기능을 묶어서 일컫는 말
Create: 데이터 생성 → POST
Read: 데이터 조회 → GET
Update: 데이터 수정 → PUT(전체 변경), PATCH(부분 변경)
Delete: 데이터 삭제 → DELETE
* GET의 두가지 방법
{
"topics": [
{
"id": 1,
"title": "REST",
"body": "Hi .. "
},
{
"id": 2,
"title": "API",
"body": "Hi .. "
}
]
}
1. Collection 읽기
fetch('topics', {method: 'GET'})
.then(
function(responses){
return response.json()
}
)
2. Element 읽기
fetch('topics/1', {method: 'GET'})
.then(
function(responses){
return response.json()
}
)
- Collection 뒤에 / 와 Element id를 작성하면 된다.
REST 설계 원칙 6가지 (REST 아키텍처 제약 조건)
1. 균일한 인터페이스
- 동일한 리소스에 대해 모든 API 요청은 동일하게 표시되어야 함
- 사용자의 이름 또는 이메일 주소와 같은 동일한 데이터가 하나의 통합 리소스 식별자(URI)에만 속하도록 해야 함
2. 클라이언트-서버 분리
- 클라이언트와 서버 애플리케이션은 독립적이어야 함
- 클라이언트 애플리케이션이 알아야 하는 유일한 정보는 요청된 리소스의 URI
- 서버 애플리케이션은 HTTP를 통해 요청된 데이터에 클라이언트 애플리케이션을 전달
3. 무상태
- 각 요청에는 처리에 필요한 모든 정보가 포함되어야 함
- 서버 애플리케이션은 클라이언트 요청과 관련된 데이터를 저장할 수 없음
4. 캐시 가능성
- 클라이언트나 서버 측에서 리소스를 캐시할 수 있어야 함
- 서버 응답에는 전달된 리소스에 대한 캐싱이 허용되는지 여부에 대한 정보도 포함되어야 함
5. 계층화된 시스템 아키텍처
- 호출과 응답이 서로 다른 계층을 거침
- 클라이언트와 서버 애플리케이션이 서로 직접 연결된다고 가정하지 않음
- 클라이언트와 서버가 최종 애플리케이션과 통신하는지 중개자와 통신하는지 알 수 없도록 설계해야 함
6. 코드 온디맨드 (Option)
- 일반적으로 정적 리소스를 전송하지만 경우에 따라서 응답에 실행 코드가 포함될 수 있으며 이런 경우는 온디맨드 방식으로만 실행되어야 함
참고자료
https://blog.postman.com/rest-api-examples/
'IT Study > CS' 카테고리의 다른 글
[CS] 절차지향 vs 객체지향 프로그래밍 (1) | 2024.01.11 |
---|---|
[Backend] UUID vs ULID vs snowflake ID (0) | 2023.12.16 |
[Frontend] nginx를 사용해서 VM에서 배포하기 (+ CodeSpliting) (0) | 2023.11.29 |
[Front] 디바운싱과 쓰로틀링 (1) | 2023.11.22 |
[CS] Stateful vs Stateless 차이 (0) | 2023.11.15 |