프론트엔드 개발

REST API 란 뭘까?

Ella Seon 2023. 6. 29. 09:55

0. API(Application Programming Interface)

- 서로 다른 프로그램 간에 소통할 수 있게 도와주는 통신 규약

- 웹에서는 클라이언트와 서버간의 통신규약

- 아주 쉽게 말하면, 서버에게 요청해서 데이터 가져오는 방법이 API 임

1. REST API(Representational State Transfer)

- API 들을 어떤식으로 만들어야 좋은 API 일까? 에 대한 답이 REST API

- RESTHTTP를 기반으로 클라이언트가 서버의 리소스에 접근하는 방식을 규정한 아키텍처
자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것. HTTP URI를 통해 자원을 명시하고 HTTP 메서드(POST, GET, PUT, DELETE)를 통해 해당 자원에 대한 CRUD를 적용하는 것을 말합니다.

REST API는 REST를 기반으로 서비스 API를 구현한 것을 의미한다.

- RESTful 은 REST의 기본 원칙을 성실히 지킨 서비스 디자인을 말한다.

 

1) REST API 구성

구성요소 내용 표현 방법
자원(resource) 자원 URI(엔드포인트)
행위(verb) 자원에 대한 행위 HTTP 요청 메서드
표현(representations) 자원에 대한 행위의 구체적 내용 페이로드

1. 리소스 (Resources): 모든 것을 리소스로 간주합니다. 예를 들어, 사용자, 제품, 주문 등 모든 데이터가 리소스가 될 수 있습니다.
2. 행위 (Verbs/Methods): HTTP 메서드를 사용하여 리소스를 조작합니다. 일반적으로 CRUD(Create, Read, Update, Delete) 작업에 대응하는 HTTP 메서드인 POST, GET, PUT, DELETE를 사용합니다.
3. 표현 (Representations): 리소스는 다양한 표현 형식으로 표현될 수 있습니다. JSON, XML, HTML 등 다양한 형식을 사용하여 데이터를 주고받을 수 있습니다
4. 상태 없음 (Statelessness): 서버는 클라이언트의 상태를 관리하지 않습니다. 각 요청은 필요한 모든 정보를 포함하고 있어야 합니다.
5. 연결 (Uniform Interface): RESTful API는 일관된 인터페이스를 유지해야 합니다. 특정 기능을 위한 엔드포인트가 명확하고 예측 가능해야 합니다.

 

 

 

블로그와 같은 서비스를 운영한다고 해보자.

하나하나의 글을 topic 이라고 부르기로 했다면 아래의 모습으로 데이터를 가지고 있을 것이다. 

아래와 같은 데이터들을 rest api 에서는 Resourse 라고 한다. 

Resource 는 URI 를 통해서 표현된다. 

topic 전체를 표현하고 싶다면 아래처럼 표현하는데 그걸 Collection이라고 한다. 

Collection 은 복수형을 사용한다. 

한건 한건의 데이터는 Element라고 한다. Collection 은 Element가 모여있는 것이다.

id값을 Element에 사용하는 것이 일반적이다. topics 뒤에 1번 붙어있는것처럼.

이름으로 식별한다면 단수형으로 사용한다. 

 

저 정보들을 가공할 수 있어야하는데 어떻게 할까?

CRUD(생성, 읽기, 수정, 삭제) 하는 작업을 method라고 한다. (HTTP 요청 메서드)

REST API는 웹의 통신 규약인 HTTP 를 이용하기 때문에 HTTP 의 method를 이용한다. 

PATCH 는 일부만 수정이 되고, PUT 은 전체교체이기 때문에 언급하지 않은 데이터는 삭제된다.

 

🔸REST API 를 설계하는데 중요한 기본적인 원칙 2가지

1) URI 는 리소스를 표현하는데 집중해야한다.
2) 행위에 대한 정의는 HTTP 요청 메서드를 통해야한다.

URI는 리소스를 표현해야 한다 URI는 리소스를 표현하는 데 중점을 두어야 한다. 리소스를 식별할 수 있는 이름은 ① 동사보다는 ② 명사를 사용한다. ③대충 봐도 어떤 정보가 들어올지 예측이 가능해야함
따라서 리소스 이름에 get 같은 행위에 대한 표현이 들어가서는 안 된다.
# bad
GET /getTodos/1
GET /todos/show/1

# good
GET /todos/1​

instagram.com/explore/tags/kpop
instagram.com/explore/tags/food
facebook.com/natgeo/photos
facebook.com/bbc/photos 이 URL들은 페이스북이 매우 잘 만든 API이다.
왜냐면 facebook.com/bbc/photos 딱봐도 BBC뉴스 페북계정의 사진첩인 느낌이 든다. URI 만 봐도 뭘 하는지 알수있다.

 

2. HTTP 상태코드

2XX

200 OK 요청이 성공적으로 보내졌음을 의미
201 Created 요청이 성공적이였으며 새로운 리소스가 생성되었음을 의미
(ex: 클라이언트가 서버에 POST 요청을 보냈을 경우, 새로운 게시물 DB 에 저장하면,
이때 서버는 201 created 상태코드를 함께 응답한다.)  

4XX

400 Bad Request 잘못된 문법으로 인하여 서버가 요청을 이해할 수 없음을 의미
(ex: 잘못된 요청 형식 Context-Type: application/json 인데 application/xml 로 할경우
서버가 필요한 필수 정보가 누락된 경우, 회원가입일 경우 ID,PW 중 PW가 누락된경우)
401 Unathorized 비인증(Unathorize)된 요청임을 의미
(ex: 클라이언트가 유효한 인증 정보(예: 로그인 또는 API 토큰)를 제공하지 않았거나
제공한 인증 정보가 유효하지 않은 경우)
403 Forbidden 콘텐츠에 접근할 권리를 가지고 있지 않음을 의미
(ex: 인증은 되었지만 권한이 없는 경우:
사용자가 로그인하여 인증되었지만, 해당 리소스에 대한 권한이 없는 경우.
예를 들어, 관리자만 접근할 수 있는 페이지를 일반 사용자가 접근하려고 시도한 경우.
or 유효하지 않은 인증 정보를 제공한 경우)
404 Not Found 요청받은 리소스를 찾을 수 없음을 의미

(ex:  클라이언트가 서버에 존재하지 않는 엔드포인트를 요청한 경우)

5XX

500 Internal Server Error 서버가 처리 방법을 모르는 상황을 의미
클라이언트측의 문제가 아니라 서버측에서의 오류로 인해 요청을 제대로 처리하지 못한경우

 


참고자료

https://www.youtube.com/watch?v=PmY3dWcCxXI 

https://github.com/Esoolgnah/Frontend-Interview-Questions/blob/main/Notes/important-5/rest-api.md