1-1. Strawberry graphql 시작하기




이 튜토리얼(https://strawberry.rocks/docs)은 다음과 같이 활용이 될 수 있다

  • GraphQL 원리에 대한 기본적인 이해를 돕는다
  • Strawberry를 사용하여 GraphQL 스키마 정의 할 수 있다.
  • 스키마에 대해 쿼리를 실행할 수 있는 Strawberry 서버 를 구축 할 수 있다.

사용자가 명령줄과 Python에 익숙하고 최신 버전의 Python(3.7+)이 설치되어 있다고 가정한다.

Strawberry는 Python의 데이터 클래스 및 유형 힌트 기능 위에 구축됩니다.

1단계: 새 프로젝트 생성 및 Strawberry 설치

virtualenv 를 통해서 "strawberry debug" 서버를 설치설치 한다

$ mkdir strawberry-demo
$ cd strawberry-demo
$ python -m venv virtualenv
$ source virtualenv/bin/activate
$ pip install 'strawberry-graphql[debug-server]'

2단계: 스키마 정의

모든 GraphQL 서버는 스키마를 사용하여 클라이언트가 쿼리할 수 있는 데이터 구조를 정의한다. 하기 예제에서 타이틀과 예약자를 이용하는 예약(부킹) 쿼리하는 서비스를 구성한다.

에디터에서 schema.py 파일을 생성하고 다음 내용이 포함될 수 있도록 한다.

# schema.py
import typing
import strawberry


@strawberry.type
class Book:
    title: str # 예약 타이틀
    author: str # 예약자 


@strawberry.type
class Query:
    books: typing.List[Book]

클라이언트가 0개 이상의 부킹 목록을 반환하는 쿼리를 실행할 수 있는 GraphQL 스키마가 생성되었다.

3단계: 데이터 세트 정의

이제 스키마 구조가 있으므로 데이터 자체를 정의할 수 있다. Strawberry는 모든 데이터 소스(예: 데이터베이스, REST API, 파일 등)와 함께 작동할 수 있다.

아래 예제는 일부 예약을 반환하는 함수를 구 현한것이다.

def get_books():
    return [
        Book(
            title="The Great Gatsby",
            author="F. Scott Fitzgerald",
        ),
    ]

Strawberry는 스키마를 생성하기 위해 Python 클래스를 사용하므로 데이터 개체를 생성하는 데 재사용할 수도 있습니다.

4단계: 리졸버 정의

이제 예약(부킹내역)을 반환하는 함수가 있지만 Strawberry는 쿼리를 실행할 때 위에 작성한 함수를 사용해야 하는지 알 수가 없다 이때에 쿼리를 업데이트하여 예약내역(부킹내역)에 대한 리졸버 를 지정해야 한다. 리졸버는 Strawberry에게 특정 필드와 관련된 데이터를 가져올 수 있도록 한다.

@strawberry.type
class Query:
    books: typing.List[Book] = strawberry.field(resolver=get_books)

"strawberry.field" 틍해 특정 필드에 대한 리졸버를 지정할 수 있다.

예약 필드에 대한 리졸버를 지정할 필요가 없다. Strawberry가 각 필드에 대한 기본값을 추가하여 해당 필드의 값을 반환하기 때문이다.

5단계: 스키마 생성 및 실행

데이터와 쿼리를 정의했으므로 이제 GraphQL 스키마를 생성하고 서버를 시작한다.

schema = strawberry.Schema(query=Query)

작성을 마쳤으면 터미널(커맨드라인)에서 서버를 실행 해본다.

$ strawberry server schema

디버그 서버가 시작되고 다음 출력이 표시된다.

Running strawberry on http://0.0.0.0:8000/graphql 

6단계: 첫 번째 쿼리 실행

이제 GraphQL 쿼리를 실행할 수 있다. Strawberry는 GraphiQL UI 라는 웹에서 실행 가능하 툴을 함께 제공한다 . 브라우져에서 http://0.0.0.0:8000/graphql

다음과 같은 내용이 표시된다.





"GraphiQL UI"에는 다음이 포함됩니다.

  • 쿼리 작성을 위한 텍스트 영역(왼쪽)
  • 쿼리 실행을 위한 재생 버튼(가운데에 있는 삼각형 버튼)
  • 쿼리 결과를 보기 위한 텍스트 영역(오른쪽) 스키마 검사 및 생성된 문서를 위한 보기(오른쪽의 탭을 통해)

예시로 books(예약)라는테이블을 작성 하고 단일 쿼리를 만들어보자.

다음 문자열을 왼쪽 영역에 붙여넣은 다음 재생 버튼을 클릭

{
  books {
    title
    author
  }
}

하드 코딩된 데이터가 오른쪽에 표시된다.

GraphQL을 통해 클라이언트는 필요한 필드만 쿼리가 가능하다 "author" 필드를 쿼리에서 제거한 다음 다시 실행하면 응답에는 "예약 타이틀"(title) 만 표시된다.

댓글

이 블로그의 인기 게시물

북궐도 2.0

Python Strawberry GraphQL 예제 (feat. #sqlmodel, #mysql)

Arch 계열 리눅스 구글 크롬 설치