Fachstellen-Proxy
Der Fachstellen-Proxy nimmt HTTP Requests von der Fachstelle entgegen, mappt diese auf gRPC und leitet sie an den Zufi- (Fachstellenregistrierung) bzw. Collaboration-Manager (Fachstellenbeteiligung) weiter. Zum Protokollmapping von HTTP auf gRPC wird die Bibliothek gRPC-Gateway verwendet. Dadurch können die HTTP-Endpunkte inkl. des Mappings größtenteils automatisch aus proto-Dateien generiert werden.
Requests zur Fachstellenregistrierung werden an die unter config.grpc.registration.server.url eingetragene URL (bzw. localhost:50052, wenn config.grpc.mock = true) weitergeleitet.
Requests zur Fachstellenbeteiligung (z.B. FindVorgang) werden zunächst an den CollaborationRouter weitergeleitet. Das ist ein Proxy-eigener gRPC-Server, der auf localhost und dem unter config.grpc.collaboration.router.port eingetragenen Port läuft. Dort wird die Adresse des Ziel-Collaboration-Managers aus dem Requestpayload (z.B. aus der VorgangId) extrahiert. Der Port des Ziel-Collaboration-Managers ist konstant und wird unter config.grpc.collaboration.server.port festgelegt (bzw. auf 50052 gesetzt, wenn config.grpc.mock = true). Anschließend leitet der CollaborationRouter die gRPC Request an die URL weiter, die aus der extrahierten Adresse und dem Port zusammengesetzt wird.
Getting Started
Dependencies installieren
go mod download
go install \
github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway \
github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2 \
google.golang.org/protobuf/cmd/protoc-gen-go \
google.golang.org/grpc/cmd/protoc-gen-go-grpc
Buf installieren
https://github.com/bufbuild/buf?tab=readme-ov-file
Proto Dateien anpassen
Die *.proto Dateien, die die verwendetetn GRPC Apis des Proxys definieren müssen aus den entsprechenden Projekten in das Verzeichnis api/proto kopiert werden.
Die Projekte sind:
Damit die Code generierung funktioniert müssen die proto-Dateien aktuell noch angepasst werden.
Dazu muss in jede Datei die Zeile option go_package = "de.ozgcloud.fachstellenproxy";
hinzugefügt werden, damit
die erzeugten Quellcode-Dateien im selben go package liegen.
Generierung konfigurieren
Die Generierung des Gateways kann mit den Dateien
- api/gateway-config.yml - go Code für den Gateway
- api/openapi-config.yml - für die Erzeugung der swagger json Dateien
konfiguriert werden.
Protobuf-Code und swagger datei generieren
buf generate
Erzeugt dann den Code für das Gateway und auch die Datei gen/openapiv2/fachstelleregistration.swagger.json. Diese Datei kann dann in anderen Projekten verwendet werden um die nötige DTO Klassen zu erzeugen.
Anwendung starten
ACTIVE_PROFILE=local go run cmd/fachstellen-proxy/main.go
Config
config.yml is the default config for deployment
config-local.yml is the config file for local development setting ACTIVE_PROFILE=local will load the config-local.yml
http:
server:
port: Port des HTTP Gateways (int)
grpc:
mock: gRPC Registration und Collaboration Server mocken (bool)
collaboration:
server:
port: Port des gRPC Collaboration Servers (int)
router:
port: Port des gRPC Collaboration Routers (int)
registration:
server:
url: URL des gRPC Registration Servers im host:port Format (string)
logging:
level: "ERROR" | "WARN" | "INFO" | "DEBUG"