This is a follow-up story for https://github.com/strongloop/loopback-next/pull/4258, after creating the oai enhancer service as extension point, we should add the service in @loopback/rest module so that other enhancers could register and contribute OpenAPI specs into the application(server).
Inside function getApiSpec(), you can apply an enhancer like:
getApiSpec (requestContext?: RequestContext): OpenApiSpec {
// ...other code
spec = this.OAIEnhancer.applyEnhancerByName('authorization-bearer');
}
Same as use cases
[x] add an OASEnhancerService in the rest server, as how it has other properties like _requestHandler.
[x] add tests for registering and invoking enhancers
[ ] (Stretch Goal, feel free to open new stories)if any existing spec contribution code in https://github.com/strongloop/loopback-next/blob/master/packages/rest/src/rest.server.ts#L702 should be organized into enhancers, then refactor them into enhancers
@strongloop/loopback-next @strongloop/loopback-maintainers @mschnee
Call for contribution:
This task is part of the epic "Allow out-of-box token based authentication in API Explorer" , that we wish to get it done in 2020Q1. If you're interested in working on it, please leave a message here and we'll assign it to you. We'll take the first person who responds. 馃槵
Happy contributing!
Hi @jannyHou I've had a cursory look over the code and I do have a query on how to proceed with implementation. How would I handle the sync call to an async function(is there an example to study?)
The sync example above:
getApiSpec (requestContext?: RequestContext): OpenApiSpec {
// ...other code
spec = this.OASEnhancer.applyEnhancerByName('authorization-bearer');
}
The code in spec-enhancer.service.ts:
async applyEnhancerByName(name: string): Promise<OpenApiSpec> {
const enhancer = await this.getEnhancerByName(name);
if (enhancer) this._spec = enhancer.modifySpec(this._spec);
return this._spec;
}
I've not really dealt with this issue before as I could use await. Is there is a particular trick to this implementation?
EDIT: I'll proceed by making getApiSpec async.
EDIT2: Would it be best to implement as a component like AuthStrategies contribution?
PR in progress: https://github.com/strongloop/loopback-next/pull/4554
@dougal83, with PR #4554 merged, I checked with @jannyHou, she mentioned that this issue should be good to close. If you don't object, I'm going to close this issue as done. Thanks.
Closing as done.
Most helpful comment
Closing as done.