Концепции, идеи, стратегии
Концепции, идеи, стратегииСтратегии для иерархий API

Стратегии для иерархий API

Мы можем применять различные подходы к настройке иерархии конечных точек API.

Сначала запрос, переопределение схемы

Мы можем определить родительский элемент, содержащий общий GraphQL-запрос, а затем расширить его для каждого из различных приложений.

Например, родительский сохранённый запрос /graphql-query/posts/ определит GraphQL-запрос:

query GetPosts {
  posts {
    id
    title
    url
  }
}

А дочерние сохранённые запросы для веб-сайта и мобильного приложения задают соответствующую конфигурацию схемы:

  • /graphql-query/posts/website/ => использовать schema configuration "Website"
  • /graphql-query/posts/mobile-app/ => использовать schema configuration "Mobile app"

Сначала схема, переопределение запроса

Альтернативно, мы можем объявить конфигурацию схемы на родительском уровне, после чего все дочерние элементы её наследуют, и реализовать только GraphQL-запрос:

  • /graphql-query/mobile-app/posts/
  • /graphql-query/mobile-app/users/
  • /graphql-query/website/posts/
  • /graphql-query/website/users/

Перевод endpoint

Переводим содержимое в endpoint, передавая код языка через переменную, которую дочерний endpoint может переопределить.

Например, мы можем создать сохранённый запрос /graphql-query/posts/ с таким GraphQL-запросом:

query GetTranslatedPosts($lang: String!) {
  posts {
    title @strTranslate(from: "en", to: $lang)
    url
  }
}

Нам не нужно выполнять этот endpoint напрямую, поэтому его можно отключить.

Затем мы создаём дочерний сохранённый запрос /graphql-query/posts/french/, который переопределяет GraphQL-переменную:

{
  "lang": "fr"
}