Схемы схемы JSON для графических схем GraphQL

Существуют ли какие-либо адаптеры, которые преобразуют схемы схемы JSON (например, из Swagger) в схемы GraphQL? Существует даже официальная статья об обтекании REST http://graphql.org/blog/rest-api-graphql-wrapper/, но обычно REST уже описан, и Swagger является самым популярным для него форматом. Не хотел бы писать это самостоятельно, если уже существует реализация.

Ответ 1

Также я написал библиотеку, которая позволяет вам обернуть существующий REST API, если вы используете Swagger.

https://github.com/yarax/swagger-to-graphql

В основном это сопоставление схемы Swagger для типов GraphQL.

И есть статья об этом подходе и в библиотеке https://medium.com/@raxwunter/moving-existing-api-from-rest-to-graphql-205bab22c184

Ответ 2

На самом деле я потратил некоторое время на это несколько месяцев назад. Вы можете прочитать мое сообщение с подробными результатами здесь: https://medium.com/apollo-stack/will-graphql-replace-rest-documentation-f1a55092ef9d#.m50im46o0

Посмотрев на множество схем Swagger, доступных в Интернете, я думаю, что Swagger или аналогичные языки описания API могут стать хорошей отправной точкой для определения схемы GraphQL, но они часто не содержат достаточной информации для создания схемы на их. В частности, обычно не хватает данных об отношениях между объектами.

Если вы хотите начать с описания схемы в формате JSON, все, что вам нужно сделать, это написать код, который перебирает ваши разные типы данных в Swagger и генерировать объекты GraphQLObjectType. Вы можете увидеть простой подход к этому в репозитории примеров для сообщения в блоге, которое я связал выше: https://github.com/apollostack/swapi-rest-graphql/blob/951e50ec29732c93e7aa0bc6880210fdd1816a2f/schema.js#L28

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