#hl7-fhir
#hl7-fhir
Вопрос:
Эта проблема перенесена из вопроса в нашей учетной записи Github, потому что мы хотим, чтобы ответ был доступен другим. Вот исходный вопрос:
Здравствуйте,
Ниже приведен InstanceQuery, который я пробовал
http://localhost:3000/3_0_1/Questionnaire/jamana/$graphql?query={id}
Я получаю ответ в виде Cannot query field "id" on type "Questionnaire_Query"
Итак, какой правильный формат я должен попробовать?
https://build.fhir.org/graphql.html имеет образец как http://test.fhir.org/r3/Patient/example/$graphql?query={name{text,given,family}}
.Он работает на их сервере. Я не могу получить ответ, когда я пытаюсь аналогичным образом в нашем graphql-fhir.
Ответ №1:
Оригинальный ответ с Github:
Мы используем именованные запросы, поскольку мы используем express-graphql
. Я не верю, что это допустимый синтаксис. Кроме того, предоставленный URL-адрес, похоже, не работает, я просто получаю сообщение OperationOutcome о том, что пациент не существует, что не является допустимым ответом GraphQL.
Можете ли вы попробовать изменить свой запрос с:
http://localhost:3000/3_0_1/Questionnaire/jamana/$graphql?query={id}
к этому:
http://localhost:3000/3_0_1/Questionnaire/jamana/$graphql?query={Questionnaire{id}}
При написании запроса вам необходимо указать возвращаемый тип как часть запроса экземпляра. Вы должны получить ответ, который выглядит примерно так (если вы внедрили свой распознаватель, у вас будут данные, а не null):
{
"data": {
"Questionnaire": {
"id": null
}
}
}
и из последующего комментария:
Если вы получаете значение null, значит, вы делаете это правильно, но вы не написали запрос или не подключили его к источнику данных. Вам все еще нужно вернуть анкету в распознаватель.
Где вы видите это:
instance: {
name: 'Questionnaire',
path: '/3_0_1/Questionnaire/:id',
query: QuestionnaireInstanceQuery,
},
Вы видите, что конечная точка регистрируется с параметром id, который отличается от аргумента GraphQL. Это просто экспресс-аргумент. Если вы перейдете кquestionnaire/query.js файл, вы можете видеть, что запрос QuestionnaireInstanceQuery имеет другой распознаватель, чем стандартный запрос QuestionnaireQuery. Итак, в вашем questionnaire/resolver.js файл, если вы хотите, чтобы работали как запрос, так и запрос экземпляра, вам необходимо реализовать оба преобразователя.
например
// This is for the standard query
module.exports.getQuestionnaire = function getQuestionnaire(
root,
args,
context = {},
info,
) {
let { server, version, req, res } = context;
// Do query and return questionnaire
return {};
};
// This one is for a questionnaire instance
module.exports.getQuestionnaireInstance = function getQuestionnaireInstance(
root,
args,
context = {},
info,
) {
let { server, version, req, res } = context;
// req.params.id is your questionnaire id, use that for your query here
// queryQuestionnaireById does not exist, it is pseudo code
// you need to query your database here with the id
let questionnaire = queryQuestionnaireById(req.params.id);
// return the correct questionnaire here, default returns {},
// which is why you see null, because no data is returned
return questionnaire;
};