Я пытаюсь создать собственное расширение Apollo для сбора некоторых метрик производительности (продолжительности выполнения) распознавателей и записи их в инструмент APM. Из документации Apollo , выпуска Github здесь и примера , опубликованного Apollo, я обнаружил, что метод willResolveField
при переопределении получает GraphQLResolveInfo
(который в свою очередь имеет родительский тип parentType
и имя поля fieldName
). Если можно заметить, поля уже разрешены, когда этот метод вызывается сервером Apollo. Знает ли кто-нибудь, где на самом деле происходит разрешение этого поля, прежде чем отправить его на willResolveField
?
С другой стороны, если мое понимание неверно - имя willResolveField
, похоже, вводит в заблуждение. Может ли кто-нибудь пролить свет на это?
Пример кода того, чего я пытаюсь достичь
class GraphQLAPMExtension implements GraphQLExtension<TContext> {
requestDidStart(options:{ request, operationName, ... }) {
// perform APM specifics to log the request and other info
return (...errors) => {
if(errors.length) {
// some more custom APM stuff!
}
}
}
willResolveField(source, args, context: TContext, info: GraphQLResolveInfo) {
// info contains parentType and fieldName
// and it seems to be that fields are already resolved and passed to this function
}
}