Я установил соединитель OpenAPI в Loopback 4, как описано здесь , и для неавторизованных запросов он работает хорошо; Мне удалось создать соответствующий источник данных, сервис и контроллер. Мой сервис похож на пример GeocoderProvider , но, скажем, со следующим интерфейсом сервиса.
export interface MyExternalService {
search_stuff(params: {query?: string}): Promise<MyExternalServiceResponse>;
}
export interface MyExternalServiceResponse {
text: string;
}
Из моего контроллера я вызываю его так, где this.myExternalService
внедренный сервис (вид не связан, но может ли Loopback также неявно анализировать JSON ответ от внешнего источника данных API?):
@get('/search')
async searchStuff(@param.query.string('query') query: string): Promise<void> {
return JSON.parse(
(await this.myExternalService.search_stuff({query})).text,
);
}
Теперь внешней конечной точке, соответствующей myExternalService.search_stuff
, требуется Authorization: Bearer <token>
заголовок, в котором токен отправляется в Loopback клиентом , т. е. это не API-ключ stati c или около того. Предполагая, что я добавил @param.query.string('token') token: string
в список параметров моего метода контроллера searchStuff
, как я могу переслать этот токен на соединитель OpenAPI? Это соответствующая часть базового файла определения OpenAMI YAML:
paths:
/search:
get:
security:
- Authorization: []
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/SearchResults'
operationId: search-stuff
components:
securitySchemes:
Authorization:
type: http
scheme: Bearer