Skip to content

A web based REST API for the duit library.

License

Notifications You must be signed in to change notification settings

cansik/duit-rest

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

REST for Duit

PyPI Github

A web-based REST API for duit datafields.

This is an addon module for the data ui toolkit (duit) which adds REST API support for DataFields.

Installation

The package can be installed directly from PyPI.


pip install duit-rest

Documentation

Duit-rest uses FastAPI as REST backend to handle HTTP requests. The main class is the RESTService which handles the HTTP server and maps the annotated DataFields to the corresponding endpoints.

RESTEndpoint

It is possible to annotate existing DataFields with the RESTEndpoint annotation. This annotation later tells the RESTService if the field has to be exposed over REST. It is recommended to gather all DataFields in a single object:

from duit_rest.RESTEndpoint import RESTEndpoint


class Config:
    def __init__(self):
        self.name = DataField("Cat") | RESTEndpoint()

By default, the name of the variable (e.g. name) is used as REST endpoint identifier. It is possible to change the name through the RESTEndpoint annotation.

self.name = DataField("Cat") | RESTEndpoint(name="the-cats-name")

RESTService

The RESTService handles the HTTP server and mapping with the DataFields. Here is a simple example on how to create a RESTService, add the previously defined config and start the service.

# create an actual instance of the config
config = Config()

# create a rest service
rest_service = RESTService()

# add the config object (create mapping) under the route "/config"
rest_service.add_route("/config", config)

# run the service
rest_service.run()

Settings

The RESTService has several default arguments that can be changed before the service is started:

# RESTService parameters and their default values
host: str = "0.0.0.0",  # on which interface the service is running
port: int = 9420,  # on which port the service is running
title: str = "REST API"  # title of the API

Routes

It is possible to add various objects to the RESTService, each with a unique route (address).

rest_service.add_route("/config", config)

Each DataField is accessible under this route, so for example the name field would be available at /config/name.

API Usage

Getting values:

# Get entire configuration
GET http://localhost:9420/config

# Get specific field
GET http://localhost:9420/config/name

Setting values:

# Update entire configuration
POST http://localhost:9420/config
Content-Type: application/json

{
    "name": "NewName",
    "age": 25
}

# Update specific field
GET http://localhost:9420/config/name?value="NewName"

Start

To start the service, call the run() method. This is a blocking method that doesn't return until the service is shutdown:

# run blocking
rest_service.run()

To start the service in its own thread, set the blocking argument to `False:

# run non-blocking
thread = rest_service.run(blocking=False)

About

Copyright (c) 2025 Florian Bruggisser