컴퓨터끼리 대화하기
REST API는 RESTful API의 약자이다. API이긴 한데 REST한 API라는 것이다. 그러면 REST하다는 것은 뭐고, API는 뭘까? 우선 API부터 살펴보자.
Application
Programming
Interface : 두 가지 주제, 시스템 등이 서로 만나서 영향을 주고받는 영역
즉, 컴퓨터 프로그램(어플리케이션)끼리 대화하는 것(프로그래밍)을 도와주는 역할을 하는 것(Interface)이다. 그렇다면 REST는 뭘까?
REpresentational : 표준적인, 대표적인
State
Transfer
결국 컴퓨터는 API를 통해 대화한다. 그 때 대화의 표준적인 규칙(RESTful하게)을 정해 누구나 쉽게 대화할 수 있게 하는 것이다. 기본적으로 먼저 말을 건네는 것을 Request, 대답을 하는 것을 Response라고 한다.
그리고 이런 대화하는 방식에는 4가지가 있다.
1. GET
2. POST
3. UPDATE
4. DELETE
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 (서비스를 사용할 수 없음)
- none
- form-data
- text와 file 전달 가능
- 빈 text를 보내면 빈 문자열('' : str)로 받음
- 빈 file을 보내면 빈 문자열('' : str)로 받음
해당 조건 속에서 로직 작성
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
HTTP 요청 본문에는 문자열/바이트(혹은 JSON 직렬화 가능 값)만 들어가야 함