REST API : Representational State Transfer라는 용어의 약자, 두 컴퓨터 시스템이 인터넷을 통해 정보를 안전하게 교환하기 위해 사용하는 인터페이스
REST 구성 : 자원:RESOURCE(URI), 자원에 대한 행위:VERB(HTTP METHOD), 자원에 대한 행위의 내용:REPRESENTATIONS(HTTP Message Pay Load)
REST의 특징 :
1. Server-Client(서버-클라이언트 구조)
2. Stateless(무상태)
3. Cacheable(캐시 처리 가능)
4. Layered System(계층화)
5. Uniform Interface(인터페이스 일관성)
장단점 :
장점
- HTTP 프로토콜의 인프라를 그대로 사용하므로 REST API 사용을 위한 별도의 인프라를 구축할 필요가 없다.
- HTTP 프로토콜의 표준을 최대한 활용하여 여러 추가적인 장점을 함께 가져갈 수 있게 해 준다.
- HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능하다.
- Hypermedia API의 기본을 충실히 지키면서 범용성을 보장한다.
- REST API 메시지가 의도하는 바를 명확하게 나타내므로 의도하는 바를 쉽게 파악할 수 있다.
- 여러 가지 서비스 디자인에서 생길 수 있는 문제를 최소화한다.
- 서버와 클라이언트의 역할을 명확하게 분리한다.
단점
- 표준 자체가 존재하지 않아 정의가 필요하다.
- HTTP Method 형태가 제한적이다.
- 브라우저를 통해 테스트할 일이 많은 서비스라면 쉽게 고칠 수 있는 URL보다 Header 정보의 값을 처리해야 하므로 전문성이 요구된다.
- 구형 브라우저에서 호환이 되지 않아 지원해주지 못하는 동작이 많다.(익스플로어)
REST API 디자인 가이드 :
1. URI는 정보의 자원을 표현해야한다.
- 리소스명은 동사보다 명사를 사용
2. 자원에 대한 행위는 HTTP Method (GET, POST, PUT, DELETE, PATCH 등)로 표현한다.
-GET: 해당 리소스 조회, 리소스를 조회하고 해당 도큐먼트에 대한 자세한 정보를 가져온다.
-POST: POST를 통해 해당 URI를 요청하면 리소스를 생성
-PUT: 해당 리소스를 수정
-DELETE: 해당 리소스를 삭제
-슬래시(/)는 계층관계를 나타내는데 사용
http://restapi.example.com/houses/apartments
http://restapi.example.com/animals/mammals/whales
-URI 마지막 문자로 슬래시 포함하지 않는다.
-하이픈(-)은 URI 가독성을 높이는데 사용
-밑줄(_)은 URI에 사용하지 않는다.
-URI 경로에는 소문자가 적합하다.
-파일확장자는 URI에 포함시키지 않는다.
RESTFUL : REST의 원리를 따르는 시스템을 의미, 하지만 REST API 설계 규칙을 올바르게 지킨 시스템만을 RESTful하다고 말할 수 있다.
FastAPI : 빠르고 파이썬 표준 타입 힌트에 기초한 Python3.6+의 api를 빌드하기 위한 웹 프레임워크
특징 :
-빠름 : 사용가능한 가장 빠른 파이썬 프레임워크 중 하나
-빠른 코드 작성
-적은 버그 : 개발자에 의한 에러 약 40%감소
-직관적
-쉬움
-짧음 : 코드 중복 최소화
-견고함 : 자동 대화형 문서로 준비된 프로덕션용 코드를 얻을 수 있음
-표준기반 : API에 대한 개방형 표준기반 - OpenAPI 및 JSON 스키마
요구사항 : Python 3.7 +
pydantic : 데이터의 유효성을 검증해주는 파이썬 라이브러리, 사용자 친화적인 에러 메시지를 제공한다.
starlette : ASGI 프레임워크, Async web server을 구성하고 동작
*ASGI(비동기 서버 게이트웨이 인터페이스) : 웹 서버, 프레임워크, 응용프로그램들의 호환성 표준
*동기(직렬적) VS 비동기(병렬적)

설치 :
pip install fastapi
ASGI 서버도 설치(Uvicorn이나 Hypercorn)
pip install "uvicorn[standard]"
main.py 파일 만들기
from typing import Union
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: Union[str, None] = None):
return {"item_id": item_id, "q": q}
서버 실행
uvicorn main:app --reload
http://127.0.0.1:8000/items/5?q=somequery 를 확인하면 JSON 응답을 볼 수 있음
http://127.0.0.1:8000/docs 를 확인하면 자동 대화형 API 문서를 볼 수 있음
http://127.0.0.1:8000/redoc 에서 다른 자동 문서를 볼 수 있음
참고 : https://meetup.nhncloud.com/posts/92
REST API 제대로 알고 사용하기 : NHN Cloud Meetup
REST API 제대로 알고 사용하기
meetup.nhncloud.com
[네트워크] REST API란? REST, RESTful이란?
REST API란 REST를 기반으로 만들어진 API를 의미합니다. REST API를 알기 위해 REST부터 알아보도록 하겠습니다. REST란? REST(Representational State Transfer)의 약자로 자원을 이름으로 구분하여 해당 자원의 상
khj93.tistory.com
[python] Pydantic 이해하기 (data class보다 더 나은 듯?)
Flask보다 각광받고 있는 파이썬 웹 프레임워크 중 하나인 FastAPI를 사용하려다 보면 pydantic이라는 라이브러리를 저절로 접하게 됩니다. FastAPI의 공식 문서를 살펴보면, FastAPI는 Pydantic과 Starlette라
bskyvision.com
Starlette
✨ The little ASGI framework that shines. ✨ Introduction Starlette is a lightweight ASGI framework/toolkit, which is ideal for building async web services in Python. It is production-ready, and gives you the following: A lightweight, low-complexity HTTP
www.starlette.io
동기, 비동기란? (+Promise, async/await 개념)
1. 동기 vs. 비동기 우선 차이점 부터 설명하자면, 동기는 '직렬적'으로 작동하는 방식이고 비동기는 '병렬적'으로 작동하는 방식이다. 즉, 비동기란 특정 코드가 끝날때 까지 코드의 실행을 멈추
velog.io
'개인공부' 카테고리의 다른 글
| 도커 컴포즈에서는 이미 돌아간 컨테이너 삭제 어려운가 보다. (0) | 2023.07.21 |
|---|---|
| NoSQL (1) | 2023.07.13 |
| WSGI와 ASGI (0) | 2023.07.11 |
| FAST API 사용 (0) | 2023.07.10 |
| 8월 28일~ 새노트북 개발환경 설치기행 (0) | 2022.09.03 |