Как я могу выполнить запрос экземпляра в graphql-fhir?

#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;
};