Transport Protocol

The webwire transport protocol exists in two variants.

  1. Stateless unidirectional (e.g. HTTP)
  2. Stateful bidirectional (e.g. WebSocket connections)

Both variants share some common terms and definitions which are explained on this page.

Framing

It is assumed that all protocols being used to transfer webwire messages already implement framing. Thus the webwire protocol does not encode its own frame length but leaves that to the underlying protocol.

If the underlying protocol does not implement framing a framing layer must be implemented first. This is to be defined in the transport layer specific documentation.

Fully qualified method names (FQMN)

Fully qualified method names are dot (.) separated identifiers. All identifiers must be ASCII only, start with a letter followed by any number of alphanumeric characters. The last two parts are called the service name and the method name. Any leading part is called the namespace.

Examples:

FQMNNamespaceServiceMethod
Example.hello-Examplehello
foo.Example.hellofooExamplehello
foo.bar.Example.hellofoo.barExamplehello

Invalid examples:

FQMNWhy is it invalid?
helloOnly one part. Service and method name are mandatory
hey.123testThe method name must not start with a number
123hey.testThe service name must not start with a number
123ns.hey.testThe namespace must not start with a number
Über.awesomeNon ASCII character

Error codes

CodeDescription
ServiceNotFoundThe requested service does not exist.
MethodNotFoundThe requested method does not exist.
ValidationErrorThe data could not be deserialized and validated.
InternalErrorSomething bad happened while processing the request.