Skip to content

How to build a new API transport extension (or migrate a LB3 one) #5425

@bajtos

Description

@bajtos

This story is extracted from #4099, where we researched existing LoopBack 3 components and various techniques they use.

Now we need to write documentation for extension authors to show how to solve the following use cases in LoopBack 4:

  1. A new server type to handle requests coming from a non-REST source, e.g. Primus/WebSockets and RabbitMQ.

  2. WebSockets: mount WebSocket-handler on the underlying http server used by @loopback/rest.

  3. Message queues: allow consumers to also produce (publish) new messages, e.g. as a response to the incoming message.

Prior work:

I see the following major areas to cover (feel free to add more items to this list):

  • How can a transport implementation discover endpoint handlers (controllers, routes, message consumers, etc.) registered in the application context? (Related: How can extensions introspect application artifacts How can extensions introspect application artifacts #5426)
    • Also how to handle handlers added dynamically after application has started
  • How should be a transport extension structured like?
    • Ensure that app.start() will start the server/subscriber, app.stop() stop it
    • How to create a per-request context and populate it with request-specific metadata

In most cases, the new content will be useful to authors building new LB4 components too, therefore we should structure the content in two parts:

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions