raw_api_server

A Dart package for building small and simple socket-based APIs.

Features

  • Declarative
  • Lightweight
  • Extensible
  • Determines action via some uint8 of the request (default: 4 bytes)

Getting started

Start by adding raw_api_server to your pubspec.yaml: dart pub add raw_api_server

Usage

Server

The most basic implementation of a server is as follows:

final server = RawApiServer(
  port: <port>,
  endpoints: [
    ...
  ],
);

await server.start();

The endpoints parameter expects a list of type ApiEndpoint. An endpoint consists of an id to identify which action we expect, and a function to handle the request.

final echoEndpoint = ApiEndpoint(
  id: 0,
  handler: (socket, args) {
    final argsString = String.fromCharCodes(args);
    socket.write('you said: ${argsString}');
  }
);

The endpoint above occupies id = 0, so any client requests with id = 0 will be directed to our echoEndpoint. This endpoint has the basic functionality of replying to the client with their own arguments.

Note: Endpoints must have unique id values.

Client

A very basic socket wrapper exists for some mild Dart compatibility with raw_api_server.

final client = RawApiClient(
  port: <port>,
  host: <host>,
  onReceive: (socket, data) {
    print('Client received: ${String.fromCharCodes(data)}');
  }
);

await client.connect();

We can also make requests using the client. Requests are in the format of a List<int> whose first value is an endpoint id. We can build these requests easily using an ApiRequest.

final request = ApiRequest.fromUtf8(id: 0, stringArgs: 'hello!');
await client.sendRequest(request);