여니의 프로그래밍 study

[REST API] REST API가 뭐야 도대체! (+API, HTTP Method, HTTP Status Code ... )

여니's 2022. 2. 26. 23:58

 

REST API, 어디서 많이 들어본 개념이지만,

하지만 말로 설명하지 못하는 1인,,

(남한테 설명 못하면 그건 알고 있는 게 아니라

수박 겉핥기 식으로 두루뭉실하게 알고 있는 겁니다..)

 

 

그래서 제대로 파보기로 했습니다.

방법도 나중에 알아보기 쉽도록 정리해두는 기념으로 해서..

포스팅을 시작해보겠습니다..

 

일단 API 개념에 대해서 짧게 짚고 넘어가볼게요.


API란?

: Application Programming Interface의 약자,

 

예시를 들어서 쉽게 설명해보면,

레스토랑에 손님, 점원, 주방이 있다.

 

1. 점원은 메뉴판을 손님에게 보여준다.

2. 점원은 손님이 고른 메뉴를 접수받고, 주방에 전달한다. 

3. 주방에서 음식이 나오면 점원은 손님에게 서빙한다. 

 

여기서 API가 어느 역할일까요?

바로 '점원'입니다.

 

이렇게 API를 사용하면,

애플리케이션을 서로 연결해서 통신할 수 있게 됩니다.

 

 

API는 표준화된 문법 및 의사소통 방법을 문서로 만들어서

애플리케이션과 데이터베이스의 상호작용이 가능하도록 하는 인터페이스입니다. 

(인터페이스는 규격, 연결고리를 의미

기계와 인간 간의 소통 창구를 의미,

예를 들면 키보드, 마우스, 리모컨 등)

 

즉, 소프트웨어가 다른 소프트웨어로부터

지정된 형식으로 요청, 명령을 받을 수 있는 수단

 


 

UI는 뭘까?

User Interface!

소프트웨어와 인간 간의 소통 창구를 의미한다.

 


 

(1) API 사용하는 이유

: 구현 방식을 몰라도 제품 또는 서비스가 서로 커뮤니케이션을 할 수 있고 

이로 인해 개발 작업도 간소화되면서 시간, 비용도 절약된다.

 

API에 접근할 수 있도록 리소스에 대한 액세스 권한을 제공하고,

해당 API의 키와 문서를 제공해주면,

개발자는 기업마다 새로운 구축 환경을 만들 필요가 없다. 

API를 쓰면 되니까. ㅎ..ㅎ 

 

API 보안은 API를 잘 관리하는 것을 의미한다. 

 

 

 

 


1. REST API란?

: Representational State Transfer API 의 약자

REST 규칙에 맞게 만들어진 API라는 의미이다. 

 

정보들이 주고받아지는 데 있어서

개발자들 사이에 널리는 일종의 형식!

 

우체국 송장을 떠올려보면,

이용자들은 송장 양식에 맞춰서

정보를 작성한다!

 

형식이기 때문에

어떤 환경이든 맞춰서 기능을 만들어낸다.

 

즉 한마디로 정리하자면,

HTTP 요청을 보낼 때

어떤 URI에 어떤 메소드를 사용할지 등

개발자들 사이에 널리 지켜지고 있는 약속이다.

 

형식이기 때문에 기술에 구애받지 않는다.

어떤 기술을 가지고 만들던

이 규칙을 지키면 RESTful한 서비스를 만들 수 있다!

 

 

 


2. URI란?

: 자원을 구조와 함께 나타내는 이런 형태의 구분자를 의미함.

RESTful한 API를 작성하기 위해선

URI는 동사가 아닌 명사들로 이뤄져야한다.

 

 

 

 


3. CRUD 

- CREATE : 생성

- READ : 조회

- UPDATE : 수정

- DELETE : 삭제

 

 

 

 


4. HTTP (HyperText Transfer Protocol)

REST API로 서버에 요청을 보낼 때,

HTTP (HyperText Transfer Protocol)란 규약에 따라 신호를 전송한다.

 

HTTP란?

: 웹 환경에서 정보를 주고 받기 위한 프로토콜이다. 

클라이언트는 HTTP 응답코드를 확인해서 

요청이 실패했는지 성공했는지 알 수 있다.

 

 

 


5. HTTP Method

 

사실 이것들의 기능이 특정 용도에 제한되어 있는 건 아니다.

하지만 Restful한 API를 만들기 위해서,

누구든 각 요청의 의도를 한 눈에 파악하기 쉽도록,

따라서 목적에 따라 구분해서 사용해야 한다.

 

참고로

POST, PUT, PATCH는

BODY란 주머니가 있어서

정보를 get이나 delete보다 많이

그리고 안전하게 보낼 수 있다.

 

 

(1) GET

: 데이터를 조회하는 데 사용한다. (READ)

 

요청 성공 : 200 OK HTTP 응답코드

에러 발생 : 400 ERRORor 404 ERROR

 

(2) DELETE

: 데이터 삭제 (DELETE)

 

 

(3) POST

: 새로운 정보를 추가하는 데 사용한다. (CREATE)

요청 성공 : 201 (Created) HTTP 응답코드

 

 

(4) PUT

: 기존 정보를 업데이트하는 데 사용한다. (UPDATE)

정보를 통째로 갈아끼울 때

 

(ex)

이름 : 홍길동

나이 : 14세

-> 

이름 : 김길동

나이: 17세

 

(5) PATCH

: 기존 정보를 업데이트하는 데 사용한다. (UPDATE)

정보 중 일부를 특정 방식으로 변경할 때 사용한다. 

 

 

 


6. HTTP 상태코드

: 요청이 성공했는지 실패했는지 서버에서 알려주는 코드이다.

 

 

[1] 2XX Success

: 서버가 클라이언트의 요청을 성공적으로 처리했음을 의미함

 

 

(1) 200 OK

: 클라이언트의 요청을 정상적으로 처리하였다. 

 

 

 

(2) 201 Created

: 클라이언트의 요청을 정상적으로 처리하였고 새로운 리소스가 생성되었다.

> 주로 POST, PUT, PATCH 요청에 대한 응답에 주로 사용된다. 

 

 

(3) 202 Accepted

: 클라이언트의 요청은 정상적이지만, 서버가 아직 요청을 완료하지 못했다.

비동기...? 

 

 

(4) 204 No Content

: 클라이언트의 요청은 정상적이나 컨텐츠를 제공하지 않는다.

204는 HTTP Response body가 존재하지 않는다. 

참고로 204를 응답하는 경우는 흔하지 않다.

 

 


[2] 4XX Client Errors

 

(1) 400 Bad Request

: 클라이언트의 요청이 유효하지 않아 더 이상 작업을 진행하지 않는다.

유효성 검증을 통해 5xx 서버 오류가 발생하는 것을 막는 수단이다.

오류 발생시

파라미터의 위치(path, query, body),

사용자 입력값, 에러 이류를

꼭 명시하기!

 

 

 

(2) 401 Unauthorized

: 클라이언트가 권한이 없기 때문에 작업을 진행할 수 없는 경우이다.

인증이 안 돼 자원을 이용할 수 없는 경우이다.

사실상 인증에 대한 이야기이다.

 

ex)

로그인이 안 되어 있어서 서버 입장에서는

현재 사용자가 누군지 알 수 없기 때문에

접근을 차단함

 

 

 

 

(3) 403 Forbidden

: 클라이언트가 권한이 없기 때문에 작업을 진행할 수 없는 경우이다. 

인증된 클라이언트가 권한이 없는 자원에 접근할 때 응답하는 상태 코드다.

 

ex)

로그인은 했으나

아직 새싹 회원이라

고인물 회원만 접근 가능한 게시글을 읽을 수 없을 때!

서버 입장에서는 현재 요청자가 누군지 알고 있지만,

해당 사용자는 요청한 자원에 대해 접근할 권한이 없다고 판단하여

접근을 차단함.

 

 

 

 

(4) 404 Not Found

: 클라이언트가 요청한 자원이 존재하지 않는다.

- 경로가 존재하지 않을 때

- 자원이 존재하지 않을 때

 

ex)

존재하지 않는 페이지 방문 시

 

 

 

 

 

(5) 405 Method Not Allowed

: 클라이언트의 요청이 허용되지 않는 메소드인 경우

메소드 = HTTP Method

 

 

 

 

 

 

(6) 409 Conflict

: 클라이언트의 요청이 서버의 상태와 충돌이 발생한 경우

 

 

 

 

 

 

(7) 429 Too many Requests

: 클라이언트가 일정시간 동안 너무 많은 요청을 보낸 경우


 

[3] 5XX Server erros

: 서버 오류로 인해 요청을 수행할 수 없다는 의미.

 

https://gist.github.com/subicura/8329759

 

유명 서비스들의 API Response 분석

유명 서비스들의 API Response 분석. GitHub Gist: instantly share code, notes, and snippets.

gist.github.com

 

 


 

 

 


RESTful api design guidelines > 검색해보기

스웨거 swagger > 검색해보기


 

참고 자료

https://www.youtube.com/watch?v=iOueE9AXDQQ&loop=0 

 

HTTP 응답코드

REST API 관점에서 바라보는 HTTP 상태 코드(HTTP status code) (tistory.com)

 

REST API 관점에서 바라보는 HTTP 상태 코드(HTTP status code)

<!DOCTYPE html> REST API 관점에서 바라보는 HTTP 상태 코드(HTTP status code) REST API 관점에서 바라보는 HTTP 상태 코드(HTTP status code) TOC Introduction HTTP 와 REST HTTP Status Code 2XX Success 4...

sanghaklee.tistory.com