API, RESTful API, CRUD 많이 듣고 알고 있는 단어들 이지만 다시 한 번 간단히 정리하고 가보자.
API, RESTful API, CRUD
API - Application Programming Interface
- 소프트웨어 끼리 서로 대화하기 위한 규칙들의 집합을 모두 API라고 함
- 공식적으로 어떻게 써야 한다는 표준은 없지만 권장 사항이 존재하고 이에 대한 표준은 존재한다.
- 표준을 사용한다면 구현하기 위한 프로토콜이 존재하고 약속대로 호출한다면 모두 호출이 되어야 한다.
RESTful API - Reprentational State Transfer
- 그냥 인터넷에서 데이터를 교환하는 방법과 원칙에 대한 논문
- REST 웹에서 데이터를 전달하는 간단하고 효율적인 방법을 제공하는 아키텍처.
- 특징
- 자원 기반이다.
- 클라이언트와 서버가 명확히 분리
- 각 요청은 독립적
- 상태가 없음
- 응답은 캐시가 가능하면 네트워크 효율성을 향상 시켜야 함
- 인터페이스가 일관되어야 한다.
- 주로 HTTP 메소드를 사용 - GET, POST, PUT, DELETE
CRUD - Create, Read, Update, Delete
- 데이터 관리의 네 가지 기본 기능
- RESTful API에서 CRUD 작업 방식
- HTTP 메소드를 통새 CRUD 작업이 매핑 됨
- Create: POST
- Read: GET
- Update: PUT/PATCH
- Delete: DELETE
FastAPI 기초 문법
FastAPI 인스턴스
app = FastAPI()
- 변수에 FastAPI 클래스의 인스턴스를 할당
- 인스턴스는 라우팅과 요청 처리 응답 생성 등의 중심 점 역할을 함
라우팅?
클라이언트의 요청을 서버의 적절한 엔드포인트 (함수) 로 전달하는 과정
FastAPI에서는 라우트를 함수 생각하면 됨
- 경로 함수는 특정 HTTP 메서드와 URL 경로에 대한 요청을 처리함
- FastAPI는 데코레이터를 사용해서 함수를 경로와 연결한다.
- 파라미터?
- 쿼리 매개변수
- 요청 매개변수
- 폼 데이터
- 헤더
- 쿠키 등등
@app.get("/")
async def root():
return {"message": "나는 예찬"}
@app.get("/test")
async def test():
return {"message": "테스트 테스트"}
위 코드를 간단히 분석해 보면
- 첫 줄은 get이라는 메서드로 기본 루트 url("/")로 오는 요청을 받게 되면 아래 함수를 실행시키겠다는 의미를 가짐.
⇒ 이게 어떤 원리로 동작을 할까?
Uvicorn으로 실행!
Uvicorn은 서버로 FastAPI를 실행해줌
- Command Line에서 Uvicorn 명령어로 실행하기
uvicorn main.py:app --reload
- Python Main 함수 안에서 실행하기 → port와 host 지정 가능 (reload는 자동 재시작기능)
if __name__ == "__main__":
uvicorn.run("main:app", host="0.0.0.0", port-8000, reload=True)