Рубрики
Без рубрики

Строительство APIS GraphQL с клубникой (часть 1: Запросы)

Strawberry – это современная библиотека GraphQL Server для Python, которой просто понять и быстро начать. В этой серии мы узнаем, как использовать клубнику для создания полнофункционального API GraphQL. Tagged с GraphQL, Python, Strawberry, API.

Примечание: этот пост является частью 1 в серии постов в блоге, которые я пишу, работая над официальной документацией для клубники. Первоначально он был опубликован мой блог .

Strawberry – это современная библиотека GraphQL Server для Python, которой просто понять и быстро начать. В этой серии мы узнаем, как использовать клубнику для создания полнофункционального API GraphQL.

Если вы впервые работаете с GraphQL, я бы порекомендовал прочитать первые 4 урока График Основы курс, чтобы узнать об основных понятиях, прежде чем продолжить.

Без лишних слов, давайте погрузимся!

Настройка среды

Для начала мы собираемся настроить нашу среду разработки. Поскольку Strawberry использует некоторые новые функции Python (например, обработки данных и подсказки типов), вам нужно убедиться, что вы запускаете Python 3.7 или выше. Вы можете проверить, какую версию Python вы установили, запустив $ python -версия . Если у вас нет Python.7, установленного на вашей машине, вам нужно это настроить. Я рекомендую использовать Pyenv для этого.

После установки Python 3.7 вам нужно настроить виртуальную среду и установить клубнику.

$ python --version
Python 3.7.4

$ python -m venv venv
$ source venv/bin/activate
$ pip install strawberry-graphql

Ницца! Вы готовы начать работу.

Привет, мир!

Давайте создадим файл с именем app.py и подключить базовое приложение для клубники:

import strawberry

@strawberry.type
class Query:
    @strawberry.field
    def hello(self, info) -> str:
        return "world"

schema = strawberry.Schema(query=Query)

Начнем с определения Запрос тип. Мы используем Strawberry.Type декоратор, чтобы отметить этот класс как Затем мы определяем функцию разрешения, используя Strawberry.field декоратор. Функции резолюра принимают два позиционных аргумента ( self и Информация ) и должен указать тип возврата. В этом случае мы определяем функцию разрешения, называемая Привет , который возвращает строку "Мир" Анкет

Чтобы запустить наш запрос, нам нужно разоблачить его с помощью схемы. Чтобы сделать это, мы проходим в нашем Запрос Класс как аргумент Strawberry.schema Анкет

Strawberry поставляется со встроенным сервером, чтобы помочь вам быстро встать и работать. Чтобы начать это, используя ваш app.py Файл, запустить:

$ strawberry server app

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

Откройте свой браузер, чтобы http://localhost: 8000/graphql и вы можете проверить свой запрос на игровой площадке GraphQL. Попробуйте запустить свой запрос, набрав его на правой панели, и нажав Запустить :

query {
    hello
}

Вы должны получить ответ, который выглядит как:

{
  "data": {
    "hello": "world"
  }
}

Поздравляю! Вы написали свой первый Resolver GraphQL с Strawberry!

Пользовательские типы

Теперь мы собираемся попробовать более интересный пример. Допустим, мы хотим построить приложение Todo List. Нам понадобится сохранение списка задач с их статусами (сделано или не сделано). Чтобы запросить эти данные, нам нужно быть в состоянии вернуть пользовательский тип, который представляет объект TODO. Мы сделаем это, определив пользовательский тип GraphQL. Используя клубнику, мы можем определить пользовательский тип GraphQL, например, SO:

@strawberry.type
class TodoType:
    name: str
    done: bool

Здесь мы создаем тип, используя Strawberry.Type декоратор, с str Атрибут называется имя и Bool Атрибут называется Готово Анкет Это определит тип GraphQL со следующим SDL:

type TodoType {
  name: String!
  age: Boolean!
}

Теперь давайте использовать его в запросе. Мы определим запрос и функцию разрешения, как мы это делали в прошлый раз, только на этот раз мы назваем функцию Тодос , дайте ему возвратный тип Список [todotype] , и пусть он вернет наше множество Тодоса. Это должно выглядеть примерно так:

from typing import List

todos = [
  TodoType(name="Todo #1", done=False),
  TodoType(name="Todo #2", done=False),
  TodoType(name="Todo #3", done=True)
]

@strawberry.type
class Query:
    @strawberry.field
    def todos(self, info) -> List[TodoType]:
        return todos

Давайте проверим это на игровой площадке GraphQL. Если мы запустим этот запрос:

query {
  todos {
    name
    done
  }
}

Мы должны получить следующий ответ:

{
  "data": {
    "todos": [
      {
        "name": "Todo #1",
        "done": false
      },
      {
        "name": "Todo #2",
        "done": false
      },
      {
        "name": "Todo #3",
        "done": true
      }
    ]
  }
}

Потрясающий! Мы создали пользовательский тип и пользовательский резолвер, который возвращает этот тип.

Аргументы резолюра

Еще одна важная особенность любого приложения TODO – это возможность фильтровать ваш Todos по их статусу. Чтобы сделать это, нам нужно было бы передать дополнительные параметры в наш запрос GraphQL. С помощью клубники вы можете добавить параметр в любое определение резоливера, добавив типизированный входной аргумент в функцию разрешения. Если вы предоставите значение по умолчанию для входного аргумента, параметр будет необязательным в вашей схеме GraphQL.

В нашем случае мы хотим иметь возможность фильтровать наш тодо по их Готово Значение, поэтому мы добавим аргумент под названием Готово типа буль . Мы также добавим некоторую логику в резольвер, чтобы фильтровать Todos в нашем массиве:

@strawberry.type
class Query:
    @strawberry.field
    def todos(self, info, done: bool = None) -> List[TodoType]:
        if done is not None:
            return filter(lambda todo: todo.done == done, todos)
        else:
            return todos

Если мы снова запустим наш запрос с Готово Параметр, мы должны увидеть результаты. Запуск этого запроса:

query {
  todos(done: true) {
    name
    done
  }
}

вернется:

{
  "data": {
    "todos": [
      {
        "name": "Todo #3",
        "done": true
      }
    ]
  }
}

Вот! Теперь у вас есть работающий API GraphQL с использованием Strawberry. Это только царапает поверхность того, что может сделать клубника. Если вы хотите узнать больше, проверьте Strawberry на GitHub .

Оригинал: “https://dev.to/jaydenwindle/building-graphql-apis-with-strawberry-part-1-queries-il8”