Fraunhofer-IIS / libjapi

libjapi is a universal JSON to C API library. It receives newline-delimited JSON (NDJSON) messages via TCP and calls registered C functions. A JSON response is returned for each request. Furthermore, it is also possible to create push services, which asynchronously push JSON messages to the clients subscribed to them.
MIT License
3 stars 1 forks source link

Include args in response - [merged] #93

Closed fraunhofer-iis-bot closed 1 year ago

fraunhofer-iis-bot commented 4 years ago

In GitLab by @jannismain on Feb 25, 2020, 15:37

Merges include-args-in-response -> dev

Closes #26

fraunhofer-iis-bot commented 4 years ago

In GitLab by @cstender on Feb 25, 2020, 15:49

Why would one need the args from the request in the resonse?

fraunhofer-iis-bot commented 4 years ago

In GitLab by @jannismain on Feb 25, 2020, 15:56

Das get_temperature Beispiel zeigt es ganz schön:

--> {"japi_request": "get_temperature", "args": {"unit": "kelvin"}}
<-- {"japi_response": "get_temperature", "data": {"temperature": 290.0, "unit": "kelvin"}}

Hier muss die Anwendung explizit das argument aus der anfrage mit der antwort zurücksenden. Im Beispiel wird das gemacht und der client kann den zurückgegebenen Wert interpretieren. Aber in anderen Anwendungsfällen (z.B. Interstellar) wurde das bisher nicht gemacht. Da sieht eine Anfrage dann so aus:

--> {"japi_request": "get_config", "args": {"device": "adc1"}}
<-- {"japi_response": "get_config", "data": {"config": "3e4a78b4c3a9e"}

Der Client versteht die Antwort nur, wenn er sich die anfrage gemerkt hat. Folgendes Verhalten würde ein umschreiben der gesamten ADC und DAC Server Spezifikation umgehen:

--> {"japi_request": "get_config", "args": {"device": "adc1"}}
<-- {"japi_response": "get_config", "args": {"device": "adc1"}, "data": {"config": "3e4a78b4c3a9e"}

Man kann es auch gerne optional machen, wenn der overhead ansonsten nicht gewünscht ist! :-)

fraunhofer-iis-bot commented 4 years ago

In GitLab by @cstender on Feb 25, 2020, 16:01

Nachdem man es nur im Fall eines asynchronen Zugriffs benötigt, würde ich es auf keinen Fall standardmäßig machen.

Man könnte es bei der Registrierung der Request Handler mit einbauen, dass man noch ein "Options" Parameter hat (als Bitmask) in der eine Option "INCLUDE_ARGS_IN_RESP" ist.

fraunhofer-iis-bot commented 4 years ago

In GitLab by @cstender on Feb 25, 2020, 16:04

marked as a Work In Progress

fraunhofer-iis-bot commented 4 years ago

In GitLab by @cstender on Feb 25, 2020, 16:04

changed target branch from master to dev

fraunhofer-iis-bot commented 4 years ago

In GitLab by @jannismain on Feb 26, 2020, 10:05

Man könnte es bei der Registrierung der Request Handler mit einbauen, dass man noch ein "Options" Parameter hat (als Bitmask) in der eine Option "INCLUDE_ARGS_IN_RESP" ist.

Würde das nicht bestehende anwendungen brechen, die den options parameter nicht mit angeben? Oder soll ich hier eine neue funktion mit dem zusätzlichen parameter einführen?

fraunhofer-iis-bot commented 4 years ago

In GitLab by @jannismain on Feb 26, 2020, 10:07

Andere Möglichkeit die Kompatibilität zu wahren wäre eine Variadische Funktion, aber das wird schnell unübersichtlich...

fraunhofer-iis-bot commented 4 years ago

In GitLab by @cstender on Feb 26, 2020, 12:36

Ja, das ist eher unüblich für sowas. Eher gebräuchlich, sind da wirklich flags. Wenn man keine Flags angibt, muss NULL verwendet werden.

Wenn man die API nicht brechen will, könnte man auch eine eigene Funktion zum Registrieren von Request Handlern mit Flags einbauen. Aber das wird dann (auch zum Dokumentieren) schnell viel und ebenfalls unübersichtlich.

fraunhofer-iis-bot commented 4 years ago

In GitLab by @jannismain on Feb 26, 2020, 16:27

added 10 commits

Compare with previous version

fraunhofer-iis-bot commented 4 years ago

In GitLab by @jannismain on Feb 26, 2020, 16:30

added 1 commit

Compare with previous version

fraunhofer-iis-bot commented 4 years ago

In GitLab by @jannismain on Feb 26, 2020, 16:31

unmarked as a Work In Progress

fraunhofer-iis-bot commented 4 years ago

In GitLab by @jannismain on Feb 27, 2020, 07:58

added 1 commit

Compare with previous version

fraunhofer-iis-bot commented 4 years ago

In GitLab by @jannismain on Feb 27, 2020, 08:01

added 1 commit

Compare with previous version

fraunhofer-iis-bot commented 4 years ago

In GitLab by @jannismain on Feb 27, 2020, 10:41

added 1 commit

Compare with previous version

fraunhofer-iis-bot commented 4 years ago

In GitLab by @cstender on Feb 27, 2020, 14:29

Commented on test/japi_test.cc line 100

du solltest noch die beiden JSON Objekte, die du oben angelegt hast, mit put freigeben.

fraunhofer-iis-bot commented 4 years ago

In GitLab by @cstender on Feb 27, 2020, 14:30

Und gerne noch einen Einzeler im ChangeLog hinzufügen. Dann bitte noch mal alles kurz durchtesten und es wird umgehend gemerged. :-)

fraunhofer-iis-bot commented 4 years ago

In GitLab by @jannismain on Feb 27, 2020, 14:38

added 1 commit

Compare with previous version

fraunhofer-iis-bot commented 4 years ago

In GitLab by @jannismain on Feb 27, 2020, 14:39

resolved all threads

fraunhofer-iis-bot commented 4 years ago

In GitLab by @jannismain on Feb 27, 2020, 14:39

resolved all threads

fraunhofer-iis-bot commented 4 years ago

In GitLab by @cstender on Feb 27, 2020, 14:43

merged

fraunhofer-iis-bot commented 4 years ago

In GitLab by @cstender on Feb 27, 2020, 14:43

mentioned in commit 077a383b495f16fd8bba4dd7c75cb1487aa17663