Я использую Сервер Apollo 2.0 в качестве уровня агрегации graphql поверх остальных apis (разные микросервисы).
Я хочу сгенерировать схема graphql непосредственно из ответа api микросервисов вместо того, чтобы вручную писать их вручную, что может быть подвержено ошибкам.
например, если мой ответ api
const restApiResponse = {
"id": 512,
"personName": "Caribbean T20 2016",
"personShortName": "caribbean-t20 2016",
"startDate": "2016-06-29T19:30:00.000Z",
"endDate": "2016-08-08T18:29:59.000Z",
"status": 0,
};
Затем я хочу сгенерировать схему ниже на основе предоставленного typeName, например Person
-
type Person {
id: Float
personName: String
personShortName: String
startDate: String
endDate: String
status: Float
}
@Daniel Во-первых, я не получил "проверку ответа". Но прямо сейчас не выполняю проверку ответа. Он полностью пишется с нуля.
Не уверен, что вы имеете в виду под словом «написано с нуля» в этом контексте. Часто можно увидеть некоторую форму проверки ответа (вывода) - то есть механизм, который будет проверять ваши ответы по некоторой схеме. Swagger, Joi и JSON Schema - все тому примеры. Причина, по которой я спрашиваю, заключается в том, что если вы уже используете что-то подобное, скорее всего, есть инструмент для преобразования этой схемы в схему GraphQL.
@DanielRearden О, да, судя по чванству, я помню, что мы объявляем файл yaml. Но в этом случае у меня нет проверки схемы.
Итак, вы можете посмотреть что-то вроде swagger-to-graphql или graphql-liftoff





На самом деле это не отвечает на ваш вопрос, но я бы рекомендовал вам НЕ делать этого. GraphQL определяет себя как «полностью управляемый клиентом», что говорит мне о том, что каждый определяемый вами запрос должен быть четко определен как то, что конкретно хочет клиент. Если у вас есть только FLAT-данные, вам не нужен GraphQL, и REST вполне подойдет. Если вы этого не сделаете, вам нужно будет тщательно обработать и вложить данные так, как этого хочет клиент, и имеет смысл для вашего пользовательского интерфейса. Есть много инструментов, чтобы упростить это, но я бы посоветовал не то, что вы просите.
Наконец, после долгих поисков и поисков я написал сценарий, который сделает это за меня -
С этим есть некоторые незначительные проблемы, такие как int анализируются как Float, но это нормально, так как я могу заменить их на int, если требуется.
const { composeWithJson } = require('graphql-compose-json');
const { GQC } = require('graphql-compose');
const { printSchema } = require('graphql'); // CommonJS
const restApiResponse = {
"id": 399,
"templateId": 115,
"amount": 100000,
"amountINR": 100000,
"amountUSD": 0,
"currencyCode": "INR",
"createdAt": "2018-06-07T00:08:28.000Z",
"createdBy": 36,
};
const GqlType = composeWithJson('Template', restApiResponse);
const PersonGraphQLType = GqlType.getType();
GqlType.addResolver({
name: 'findById',
type: GqlType,
args: {
id: 'Int!',
},
resolve: rp => {
},
});
GQC.rootQuery().addFields({
person: GqlType.getResolver('findById'),
});
const schema = GQC.buildSchema();
console.info(printSchema(schema));
Он генерирует такой вывод -
type Template {
id: Float
templateId: Float
amount: Float
amountINR: Float
amountUSD: Float
currencyCode: String
createdAt: String
createdBy: Float
}
Что вы в настоящее время используете для проверки ответа для этих конечных точек REST?