FabAccess API
Allgemeines
Die FabAccess API ist eine zentrale Komponente von FabAccess und hat einige Veränderungen hinter sich. Sie basiert auf im Kern auf Cap'n Proto und ist für die Kommunikation zwischen Server (Difluoroborane) und Client (Borepin) verantwortlich. Hinweise zum Grundkonzept finden sich auch unter https://docs.fab-access.org/books/was-ist-fabaccess-grundkonzepte/page/capn-proto-api.
Die aktuelle API von FabAccess ist auf dem Versionsstand 0.3.0. Der Umzug von FabAccess-API zu FabAccess-API-cs ist noch nicht erfolgt.
Die API wird verwendet, um eine erweiterbare und bidirektionale API bereitzustellen. Dank der Codegenerierungsfunktion von Cap'n Proto kann die API in jede Programmiersprache portiert werden. Jedes Interface wird in einer übersichtlichen Schema-Sprache dargestellt, was die API selbst dokumentierend macht. Die Verfügbarkeit von Interfaces im Client kann durch einfache Null-Checks überprüft werden.
Authentifizierung
Um einen übergeordneten Zugangspunkt zu bieten, ist die API in Systeme unterteilt, die erweitert und ausgetauscht werden können. Der Einstiegspunkt in die API ist das Bootstrap-Interface, das jedem Client angeboten wird. Nach der Authentifizierung werden die für den Client relevanten Interfaces bereitgestellt.
Scripting
Die API soll anderen Clients oder Skripten einen stabilen Zugang zu Ressourcen ermöglichen und die Zusammenarbeit zwischen Systemen fördern. Der Server entscheidet selbst, welche Ressourcen und Interfaces er den Clients zur Verfügung stellt, je nach Berechtigung und Konfiguration. Die Clients müssen daher in der Lage sein, damit umzugehen.
Ressourcenzugang
Durch die API und die damit verbundenen Anforderungen soll der Zugang zu Ressourcen für alle erleichtert und die Zusammenarbeit gefördert werden. Diese Grundlagen sollen dazu beitragen, ein föderiertes System für den Ressourcenverleih aufzubauen.
Details zu Cap'n Proto finden sich auf deren Homepage: https://capnproto.org und https://github.com/capnproto/capnproto
Warum gibt es keine REST API?
Der einfachste Punkt, weswegen REST eher ungeeignet ist der, dass unsere Verbindung bidirektional ist, also beide Seiten zu jedem Zeitpunkt Daten an die jeweils andere schreiben können. Das würde WebRTC prinzipiell problemlos ermöglichen (Datenaustausch z.B. per JSON), aber eine einfache TCP- oder QUIC-Verbindung ebenso und mit wesentlich weniger Setupaufwand. Sobald es um WebRTC geht, sind in einem webbasierten Client große Mengen angepasster JavaScript-Code nötig. Ist das der Fall, könnten diese TCP-/QUIC-Verbindungen über Websockets tunneln und die bestehende Cap'n Proto API ansprechen.
Cap'n Proto API ansprechen
Eine Übersicht über verschiedene Sprachen: https://capnproto.org/otherlang.html
FabAccess-API
Dies ist die ursprüngliche und aktuell verwendete API. Sie ist direkt in der Schemasprache Capn' Proto implementiert (*.capnp Dateien).
- Sprachreferenzen: https://capnproto.org/language.html
- Quellcode: https://gitlab.com/fabinfra/fabaccess/fabaccess-api
- Releases: https://gitlab.com/fabinfra/fabaccess/fabaccess-api/-/tags
Diese API sollte ursprünglich im April 2024 durch fabaccess-api-cs abgelöst werden. Wegen 26.07.2024 // FabAccess Entwicklung kommt zum Erliegen wurde dieser Schritt jedoch bisher nicht vollzogen.
Benutzen der API
Die FabAccess-API kann mittels pyfabapi (Python) verwendet werden.
Aufbau
Im Folgenden wird der Inhalt der einzelnen Schemadateien kurz erläutert:
connection.capnp
Ausgangspunkt für API-Interaktionen mit einer Instanz der Schnittstelle Bootstrap
, die beim Verbindungsaufbau an jeden Client gesendet wird.
authenticationsystem.capnp
SASL-basierte Authentifizierung, die bei erfolgreicher Authentifizierung eine Instanz von struct session
aus connection.capnp
zurückgibt und den Zugriff auf einige oder alle Subsysteme auf der Grundlage von Benutzerrollen ermöglicht.
machinesystem.capnp
Suchsystem für Maschinen auf der Grundlage von URN oder konfigurierten Namen.
permissionsystem.capnp
Administrativer Zugang zu internen Rollen.
usersystem.capnp
Lookup & Admin-Zugang zur internen Darstellung der Benutzer.
machine.capnp
Methoden für Maschinenobjekte, die Zustandsaktualisierungen nach dem derzeitigen 5-Zustands-Modell und den administrativen Zugang für privilegierte Bediener ermöglichen.
user.capnp
Zugang zu Benutzerinformationen und Verwaltungsmethoden für privilegierte Benutzer.
space.capnp
/ general.capnp
/ role.capnp
In anderen Dateien verwendete Hilfstypen.
TLS Verschlüsselung
FabAccess ist wählerisch, was die verwendete Transportverschlüsselung angeht.
Kompatibel sind TLS v1.2 und TLS v1.3, jeweils begrenzte Chiffren
Dies ist kein funktionaler Teil der Cap'n Proto API, sondern eine notwendige Information für Drittanbieter-Implementierungen des Protokolls.
FabAccess-API-cs
Das ist der aktuelle Rewrite der FabAccess-API in C Sharp (*.cs Dateien), jedoch ohne bisherigen Release und Switch auf die neue Architektur.
Die neue API hat bereits einen recht weiten Arbeitsstand (laut Joseph Langosch) einen Arbeitsstand von Version 0.9.0.
pyfabapi
Das ist eine kleine Python-Bibliothek für den Zugriff auf die FabAccess-API für Verwaltung und Entwicklung.
Sute
Ein Command Line Utility, um mit Rust auf die FabAccess-API zuzugreifen.
- Quellcode: https://gitlab.com/fabinfra/fabaccess/sute