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






Я использовал Аполлон-сервер-экспресс с Typescript для некоторых проектов, и у меня есть небольшая демонстрация gitHub с ним.
Я не уверен насчет best practices, но apollo-server-express в основном предоставляет обработчики graphqlExpress и graphiqlExpress.
Ознакомьтесь с документацией о Сервер Apollo с Express для получения дополнительной информации.
Спасибо за ответ! Я получаю настройку и реализацию сервера, но ищу способы более интенсивного использования TypeScript. Например, здесь в вашем приложении: github.com/guloggratislabs/zendesk-graphql-api/blob/master/s rc /… Как я могу повторно использовать интерфейс для определения схемы GraphQL и т. д.
@naffiq Да, я понял. Боюсь, что это не поддерживается (пока?). Для клиентов вы можете генерировать интерфейсы на основе схемы, но создать схему на основе интерфейсов невозможно. Нам нужно будет определить GraphQLObjectType и Interface (немного раздражает повторение кода).
обнаружил этот маленький проект github.com/19majkel94/type-graphql. Имеет отличную идею, но еще не готов к производству
Я использую GraphQL CLI. Вы бы установили это так
npm install -g graphql-cli
затем сгенерируйте свой проект GraphQL с поддержкой TypeScript
Дополнительная информация: https://oss.prisma.io/content/graphql-cli/05-Boilerplates.html
Классный пакет, хотя похоже, что он используется для фронтенд-разработки, а не для сервера. Я прав?
Он основан на сервере graphql-yoga. github.com/prismagraphql/graphql-yoga
Я написал для этого небольшую библиотеку и интерфейс командной строки. Он генерирует типизацию TypeScript как для сервера (согласно вашей схеме), так и для клиента (согласно вашей схеме и документам GraphQL). Он также генерирует сигнатуру резолверов и очень настраиваемый.
Вы можете попробовать это здесь: https://github.com/dotansimha/graphql-code-generator
Идея заключалась в том, чтобы позволить разработчику максимально использовать GraphQL и сгенерированные типы ввода, а также упростить настройку сгенерированного вывода.
Я могу полностью поддержать эту библиотеку. Это просто фантастика.
Я довольно давно использую сервер 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
Возглавив ту же проблему, я обнаружил: typegraphql.ml. Он решил все мои проблемы и очень удобен. Вы определяете свои модели с помощью декораторов / аннотаций, а фреймворк делает все остальное, чтобы синхронизировать их. На его основе node + express + apollo + ts. Абсолютно круто.