Сервер Apollo GraphQL + TypeScript

В последнее время я работал над проектом, в котором есть серверный стек node.js + express + typescript + Apollo. И во время исследования клиента Apollo я наткнулся на раздел TypeScript. Но ничего подобного не было для сервера, что оставляет мне свободу выбора в данном случае.

Итак, вопрос: есть ли какие-либо передовые методы реализации сервера Apollo graphql с машинописным текстом или чего мне следует избегать, по крайней мере?

Возглавив ту же проблему, я обнаружил: typegraphql.ml. Он решил все мои проблемы и очень удобен. Вы определяете свои модели с помощью декораторов / аннотаций, а фреймворк делает все остальное, чтобы синхронизировать их. На его основе node + express + apollo + ts. Абсолютно круто.

Markus 15.10.2019 12:39
Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Мне нравится библиотека Mantine Component , но заставить ее работать без проблем с Remix бывает непросто.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
TypeScript против JavaScript
TypeScript против JavaScript
TypeScript vs JavaScript - в чем различия и какой из них выбрать?
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Не все нужно хранить на стороне сервера. Иногда все, что вам нужно, это постоянное хранилище на стороне клиента для хранения уникальных для клиента...
Что такое ленивая загрузка в Angular и как ее применять
Что такое ленивая загрузка в Angular и как ее применять
Ленивая загрузка - это техника, используемая в Angular для повышения производительности приложения путем загрузки модулей только тогда, когда они...
15
1
11 726
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Я использовал Аполлон-сервер-экспресс с Typescript для некоторых проектов, и у меня есть небольшая демонстрация gitHub с ним.

Я не уверен насчет best practices, но apollo-server-express в основном предоставляет обработчики graphqlExpress и graphiqlExpress.

Ознакомьтесь с документацией о Сервер Apollo с Express для получения дополнительной информации.

Спасибо за ответ! Я получаю настройку и реализацию сервера, но ищу способы более интенсивного использования TypeScript. Например, здесь в вашем приложении: github.com/guloggratislabs/zendesk-graphql-api/blob/master/s‌ rc /… Как я могу повторно использовать интерфейс для определения схемы GraphQL и т. д.

naffiq 18.06.2018 12:52

@naffiq Да, я понял. Боюсь, что это не поддерживается (пока?). Для клиентов вы можете генерировать интерфейсы на основе схемы, но создать схему на основе интерфейсов невозможно. Нам нужно будет определить GraphQLObjectType и Interface (немного раздражает повторение кода).

Marco Daniel 18.06.2018 13:03

обнаружил этот маленький проект github.com/19majkel94/type-graphql. Имеет отличную идею, но еще не готов к производству

naffiq 18.06.2018 14:20

Я использую GraphQL CLI. Вы бы установили это так

npm install -g graphql-cli

затем сгенерируйте свой проект GraphQL с поддержкой TypeScript

Дополнительная информация: https://oss.prisma.io/content/graphql-cli/05-Boilerplates.html

Классный пакет, хотя похоже, что он используется для фронтенд-разработки, а не для сервера. Я прав?

naffiq 20.06.2018 13:29

Он основан на сервере graphql-yoga. github.com/prismagraphql/graphql-yoga

AFD 20.06.2018 23:16
Ответ принят как подходящий

Я написал для этого небольшую библиотеку и интерфейс командной строки. Он генерирует типизацию TypeScript как для сервера (согласно вашей схеме), так и для клиента (согласно вашей схеме и документам GraphQL). Он также генерирует сигнатуру резолверов и очень настраиваемый.

Вы можете попробовать это здесь: https://github.com/dotansimha/graphql-code-generator

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

Я могу полностью поддержать эту библиотеку. Это просто фантастика.

ctrlplusb 27.12.2018 15:00

Я довольно давно использую сервер typescript + apollo graphql и запустил шаблон, который включает в себя Дотанагенератор кода графа вместе с определенной структурой папок и подходом, который заставляет все хорошо работать вместе. Основное внимание уделяется простоте, но я продолжаю добавлять к нему, когда нахожу передовые практики и полезные библиотеки.

Репозиторий github - здесь.

Я написал небольшую упаковку под названием typescript-typedefs. Он позволяет вам определять классы и использовать декораторы машинописного текста для генерации оттуда определений типов машинописного текста. Это делает его очень простым и очень хорошо работает с сервером apollo.

Пример:

@Type()
class Student {
  @Field(ID)
  id: string;

  @Field()
  name: string;

  @Field(String)
  friendNames: string[];

  @Field({ type: Int, nullable: true })
  room: number;

  @Field()
  gpa: number;

  @Field(Course)
  courses: Course[];
}

Обязательно предлагаю использовать type-graphql + apollo-server-express

Обычно существует 2 основных способа написания API-интерфейсов Graphql. Либо сначала код, либо сначала схема.

Схема сначала была самой популярной в сообществе узлов. Это в основном означает написание файла схемы graphql (SDL), а затем его импорт и передачу на сервер apollo (или любые другие инструменты, которые вы используете), а затем подключение преобразователей. Чтобы добавить Typescript в этот поток, вы должны использовать генератор кода, такой как graphql-codegenerator, для генерации определений машинописного текста для преобразователей, которые вам необходимо реализовать.

Сначала код - это способ реализации API-интерфейсов graphql на большинстве других языков. Это в основном означает просто написание схемы с использованием библиотеки, а затем создание схемы (или файла схемы) из вашего кода. Этот подход имеет множество преимуществ, включая отсутствие необходимости определять ваши типы в нескольких разных местах.

Для решений, ориентированных на код, есть несколько хороших вариантов. Type-GraphQL и GraphQL nexus - очень надежные библиотеки с хорошей поддержкой машинописного текста. Лично я всегда буду защищать GiraphQL, потому что я поддерживаю его, но я верю, что в настоящее время это лучший способ создания API-интерфейсов graphql в машинописном тексте.

GiraphQL: https://giraphql.com/

Хорошая беседа о Prisma и почему код сначала хорош https://thewikihow.com/video_5oyWwjLpUS4

Другие вопросы по теме