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) 만 표시된다.
댓글
댓글 쓰기