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

Эта проблема перенесена из вопроса в нашей учетной записи 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 Ответ

0 голосов
/ 01 апреля 2019

Оригинальный ответ от 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}}

При написании запроса необходимо указать тип возвращаемого значения как часть запроса экземпляра.Вы должны получить ответ, похожий на этот (если вы внедрили свой преобразователь, у вас будут данные, а не нуль):

{
  "data": {
    "Questionnaire": {
      "id": 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;
};
...