Loopback-next: Add OpenAPI enhancer service in @loopback/rest

Created on 7 Jan 2020  路  6Comments  路  Source: strongloop/loopback-next

Suggestion

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).

Use Cases

Inside function getApiSpec(), you can apply an enhancer like:

getApiSpec (requestContext?: RequestContext): OpenApiSpec {
  // ...other code
  spec = this.OAIEnhancer.applyEnhancerByName('authorization-bearer');
}

Examples

Same as use cases

Acceptance criteria

2020Q1 feature help wanted

Most helpful comment

Closing as done.

All 6 comments

@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!

4539 related pull.

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?

@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.

Was this page helpful?
0 / 5 - 0 ratings