REST API

컴퓨터끼리 대화하기

by 내가 사는 세상


REST API는 RESTful API의 약자이다. API이긴 한데 REST한 API라는 것이다. 그러면 REST하다는 것은 뭐고, API는 뭘까? 우선 API부터 살펴보자.


Application

Programming

Interface : 두 가지 주제, 시스템 등이 서로 만나서 영향을 주고받는 영역


즉, 컴퓨터 프로그램(어플리케이션)끼리 대화하는 것(프로그래밍)을 도와주는 역할을 하는 것(Interface)이다. 그렇다면 REST는 뭘까?




REpresentational : 표준적인, 대표적인

State

Transfer


결국 컴퓨터는 API를 통해 대화한다. 그 때 대화의 표준적인 규칙(RESTful하게)을 정해 누구나 쉽게 대화할 수 있게 하는 것이다. 기본적으로 먼저 말을 건네는 것을 Request, 대답을 하는 것을 Response라고 한다.



그리고 이런 대화하는 방식에는 4가지가 있다.




1. 컴퓨터끼리 대화하는 방식 #CRUD


1. GET

2. POST

3. UPDATE

4. DELETE




2. 대화의 성공여부 #Status Code


1xx (Informational): 요청이 수신되었고 처리 중인 상태

ex) 100 Continue (계속)

101 Switching Protocols (프로토콜 전환)



2xx (Success): 요청이 성공적으로 처리된 상태

ex) 200 OK (성공),

201 Created (작성됨),

204 No Content (콘텐츠 없음)



3xx (Redirection): 클라이언트의 추가 동작이 필요한 상태

ex) 301 Moved Permanently (영구적으로 이동)

302 Found (발견됨)

304 Not Modified (수정되지 않음)



4xx (Client Error): 클라이언트의 잘못, 부적절한 요청으로 인해 서버가 요청을 수행할 수 없는 상태

ex) 400 Bad Request (잘못된 요청)

401 Unauthorized (인증되지 않음)

404 Not Found (찾을 수 없음)



5xx (Server Error): 서버가 유효한 요청을 수행할 수 없는 상태

ex) 500 Internal Server Error (내부 서버 오류),

502 Bad Gateway (게이트웨이 오류),

503 Service Unavailable (서비스를 사용할 수 없음)



3. 요청과 응답

3.1. 요청

스크린샷 2024-11-19 오전 9.00.51.png Postman

3.1.1. Params


3.1.2. Authorization


3.1.3. Headers


3.1.4. Body

- none

- form-data

- text와 file 전달 가능

- 빈 text를 보내면 빈 문자열('' : str)로 받음

스크린샷 2024-11-19 오전 9.09.27.png
스크린샷 2024-11-19 오전 9.09.59.png

- 빈 file을 보내면 빈 문자열('' : str)로 받음

스크린샷 2024-11-19 오전 9.14.20.png
스크린샷 2024-11-19 오전 9.13.41.png

해당 조건 속에서 로직 작성

if "file" in request.data and request.data["file"] == "":

# 로직 작성

# case1. 파일유지 및 장고 DB 필드 삭제

data.file = ""

update_fields.append("file")

# case2. 파일 삭제 및 장고 DB 필드 유지

data.file.delete(save=False)

# case3. 파일 삭제 및 장고 DB 필드 삭제

data.file.delete(save=True)

data.save(update_fields=update_fields)


- save=True 옵션 : 파일을 지우면서(s3 등 저장소) 장고의 필드값도 null로 처리

- save=False 옵션 : 파일은 지우되, 장고의 필드값은 유지(장고 어드민 상에서 url 클릭시 파일이 없는 현상 발생)


- x-www-form-urlencoded

- raw

- binary

- GraphQL



3.2. 응답





HTTP 요청 본문에는 문자열/바이트(혹은 JSON 직렬화 가능 값)만 들어가야 함







매거진의 이전글동기 / 비동기 작업