Rest
- Restful API 란?
Restful 이란 REST 설계 원리로 구성된 시스템을 말한다.
REST 아키텍처 스타일을 준수하는 웹 API(또는 웹 서비스)는 REST API 이다.
What is REST - REST API Tutorial
REST is an acronym for REpresentational State Transfer. It is an architectural style for hypermedia systems and was first presented by Roy Fielding.
restfulapi.net
- Restful API 지침
- Uniform interface : 균일한 인터페이스
- Client–server : 사용자 인터페이스 문제(클라이언트)와 데이터 저장 문제(서버)를 분리한다. → 우리는 여러 플랫폼에서 사용자 인터페이스의 이식성을 개선하고 서버 구성 요소를 단순화하여 확장성을 향상시킨다.
- Stateless : 클라이언트에서 서버로의 각 요청이 요청을 이해하고 완료하는 데 필요한 모든 정보를 포함해야 한다고 의무화한다 + 서버는 이전에 저장된 컨텍스트 정보를 이용할 수 없다. 이러한 이유로, 클라이언트 애플리케이션은 세션 상태를 완전히 유지해야 한다.
- Cacheable : 클라이언트 애플리케이션은 나중에 동등한 요청과 지정된 기간 동안 응답 데이터를 재사용할 수 있는 권리를 얻습니다.
- Layered system : 계층화된 시스템 스타일은 구성 요소 동작을 제한함으로써 아키텍처를 계층적 계층으로 구성할 수 있게 해준다. + 각 구성 요소는 상호 작용하는 바로 위 계층을 넘어 볼 수 없습니다.
- Code on demand (optional) : REST는 또한 애플릿이나 스크립트의 형태로 코드를 다운로드하고 실행하여 클라이언트 기능을 확장할 수 있게 해준다.
→ 이러한 아키텍처 지침(제약/원칙)들을 지켜 만들어 설계한 API를 Restful API 설계라고 한다.
- Restful API 설계하기
1. Identify the Resources – Object Modeling | 객체 모델링
2. Create Model URIs | 모델 URL 만들기
/devices
/devices/{id}
/configurations
/configurations/{id}
/devices/{id}/configurations
/devices/{id}/configurations/{configId}
3. Determine Resource Representations | 정해진 URL에 맞춰 형식 결정하기
3.1. Collection Resource of Devices
3.2. Single Device Resource
3.3. Collection Resource of Configurations
3.4. Single Configuration Resource
3.5. Collection Resource of Configuration under a Single Device
3.6. Single Configuration Resource under a Single Device
4. Assigning HTTP Methods | HTTP 메소드 할당하기
4.1. Browse all devices or configurations [Primary Collection]
4.2. Browse all configurations under a device [Secondary Collection]
4.3. Browse a single device or configuration
4.4. Browse a single configuration under a device
4.5. Create a device or configuration
4.6. Update a device or configuration
4.7. Remove a device or configuration
4.8. Applying or Removing a configuration on/from a device
5. More Actions | 객체 모델 설계 → URL 설계 HTTP → 메서드 작업 → 이후 추가로, 응용프로그램 측면 작업
1) Logging
2) Security
3) Discovery etc.
[참고 링크]
https://restfulapi.net/rest-api-design-tutorial-with-example/
How to Design a REST API - Step by Step Guide
Follow these steps to design a REST API - Identify Object Model, Create Resource URIs, Determine Representations and Assign HTTP Methods.
restfulapi.net
Fast
- Fast API 란?
FastAPI는 현대적이고, 빠르며(고성능), 파이썬 표준 타입 힌트에 기초한 Python3.6+의 API를 빌드하기 위한 웹 프레임워크이다.
- Fast API 특징
- 빠름 : (Starlette과 Pydantic 덕분에) NodeJS 및 Go와 대등할 정도로 매우 높은 성능. 사용 가능한 가장 빠른 파이썬 프레임워크 중 하나. + 비동기 동작으로 빠른 성능 보장
- 빠른 코드 작성 : 약 200%에서 300%까지 기능 개발 속도 증가.
- 적은 버그 : 사람(개발자)에 의한 에러 약 40% 감소.
- 직관적 : 훌륭한 편집기 지원. 모든 곳에서 자동완성. 적은 디버깅 시간.
- 쉬움 : 쉽게 사용하고 배우도록 설계. 적은 문서 읽기 시간.
- 짧음 : 코드 중복 최소화. 각 매개변수 선언의 여러 기능. 적은 버그.
- 견고함 : 준비된 프로덕션 용 코드. 자동 대화형 문서. → 뛰어난 공식문서 가이드
- 표준 기반 : API에 대한 (완전히 호환되는) 개방형 표준 기반: OpenAPI (이전에 Swagger로 알려졌던) 및 JSON 스키마.
- 편리함 : 의존성 주입 위주의 설계를 통한 DB 등에 대한 관리 편리
- Fast API 사용하기
우선, 당연하게도 FastAPI를 설치해야 한다.
- fastapi 설치
- pip3 install fastapi
- uvicorn 설치
- pip3 install uvicorn
uvicorn 란?
uvicorn은 async/await을 기반한 비동기 프로그래밍 지원, 퍼포먼스가 가장 좋다고 알려진 ASGI이다.
본 페이지 내, 실행 결과에 대해 확인하기 위한 용도로 설치한다.
ASGI 란?
Asynchronous Server Gateway Interface로 웹 서버가 비동기식 Python 프로그래밍 언어 프레임워크 및 애플리케이션에 요청을 전달하기 위한 호출 규칙이다. WSGI에서 사용하지 못했던 비동기식 프로그래밍을 이용할 수 있게 만들어줌
- Fast API 코드 작성
# main.py
from fastapi import FastAPI # FastAPI import
app = FastAPI()
@app.get("/")
def printHello():
return "Hello World"
@app.get("/json")
def printJson():
return {
"Number" : 12345
}
class Post(BaseModel):
title: str
content: str
@app.post("/posts"):
def createContents(post : Post):
title = post.title
content = post.content
1. printHello
@app.get("/")
def printHello():
return "Hello World"
👉 GET 방식으로 루트경로가 호출될 경우, "Hello World"라는 문자열"을 넘겨준다.
2. printJson
@app.get("/json")
def printJson():
return {
"Number" : 12345
}
👉 GET 방식으로 '~/json'이 호출될 경우, Key/Value 형태의 JSON 데이터을 넘겨준다.
3. createContents
class Post(BaseModel):
title: str
content: str
@app.post("/posts"):
def createContents(post : Post):
title = post.title
content = post.content
👉 POST 방식으로 '~/createContents'가 호출될 경우, 인자로 넘어온 데이터로 값을 세팅한다.
- Fast API 서버 실행
코드 작성 후, 실제 파이썬 서버를 실행시켜 확인해보도록 하자.
uvicorn main:app --reload
- univorn: 서버 실행을 위해 기본적으로 기재해야하는 명령어
- main: 실행할 초기 파이썬 파일 이름. (만약 실행 소스코드 파일 이름이 test.py였다면 test:app으로 수정해줘야 한다.)
- app: FastAPI()모듈을 할당한 객체명을 기재한다. (만약, start=FastAPI()라고 위에서 실행했었다면 여기서도 main:start라고 기재해줘야 정상 실행한다.)
- reload: 소스코드가 변경되었을 시, 서버를 자동으로 재시작해주는 옵션
👉 정상적으로 서버가 실행된 후, 본인이 작성한 api url을 확인해보면 위 소스예제와 동일한 결과값이 나타나는 것을 확인할 수 있다.
[참고 링크]
https://velog.io/@cho876/요즘-뜨고있다는-FastAPI
FastAPI에 대해 간단히 알아보기
오늘은 fastAPI에 대해 알아보도록 하겠다.FastAPI의 이론적인 개념은 다음과 같다.fastAPI란? 파이썬 3.6부터 제공되는 트랜디하고 높은 성능을 가진 파이썬 프레임워크위에서 알 수 있듯이 FastAPI는
velog.io
'woncoding > TIL' 카테고리의 다른 글
| TIL | 2.9.목 [Django User Model vs DRF Custom User Model] (0) | 2023.02.09 |
|---|---|
| TIL | 2.8.수 [TDD | Test Code] (0) | 2023.02.09 |
| TIL | 2.6.월 [CS 기초지식 | JWT] (0) | 2023.02.07 |
| TIL | 2.3.금 [CS 기초지식 | Django ORM] (0) | 2023.02.06 |
| TIL | 2.2.목 [CS 기초지식 | 동시성과 병렬성] (0) | 2023.02.06 |