_won_
wonprogrammer
_won_
전체 방문자
오늘
어제
  • 분류 전체보기
    • woncoding
      • TIL
      • WIL
    • source Code
      • Python
      • Programmers
      • BAEKJOON

블로그 메뉴

  • 방명록

티스토리

Github · Wonprogrammer
hELLO · Designed By 정상우.
_won_

wonprogrammer

TIL | 2.7.화 [Rest API / Fast API]
woncoding/TIL

TIL | 2.7.화 [Rest API / Fast API]

2023. 2. 9. 13:17

Rest

- Restful API 란?

 

Restful 이란 REST 설계 원리로 구성된 시스템을 말한다.

REST 아키텍처 스타일을 준수하는 웹 API(또는 웹 서비스)는 REST API 이다.

 

https://restfulapi.net/

 

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 지침

  1. Uniform interface : 균일한 인터페이스
  2. Client–server : 사용자 인터페이스 문제(클라이언트)와 데이터 저장 문제(서버)를 분리한다. → 우리는 여러 플랫폼에서 사용자 인터페이스의 이식성을 개선하고 서버 구성 요소를 단순화하여 확장성을 향상시킨다.
  3. Stateless : 클라이언트에서 서버로의 각 요청이 요청을 이해하고 완료하는 데 필요한 모든 정보를 포함해야 한다고 의무화한다 + 서버는 이전에 저장된 컨텍스트 정보를 이용할 수 없다. 이러한 이유로, 클라이언트 애플리케이션은 세션 상태를 완전히 유지해야 한다.
  4. Cacheable : 클라이언트 애플리케이션은 나중에 동등한 요청과 지정된 기간 동안 응답 데이터를 재사용할 수 있는 권리를 얻습니다.
  5. Layered system : 계층화된 시스템 스타일은 구성 요소 동작을 제한함으로써 아키텍처를 계층적 계층으로 구성할 수 있게 해준다. + 각 구성 요소는 상호 작용하는 바로 위 계층을 넘어 볼 수 없습니다.
  6. 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를 설치해야 한다.

  1. fastapi 설치
    • pip3 install fastapi
  2. 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
    'woncoding/TIL' 카테고리의 다른 글
    • TIL | 2.9.목 [Django User Model vs DRF Custom User Model]
    • TIL | 2.8.수 [TDD | Test Code]
    • TIL | 2.6.월 [CS 기초지식 | JWT]
    • TIL | 2.3.금 [CS 기초지식 | Django ORM]
    _won_
    _won_
    Coding Practice blog

    티스토리툴바