Angenommen, ich habe eine Remote-JAX-RS-JSON-API von einem Server, auf dem Tomcat ausgeführt wird. Ich möchte auf diese API von einem C/C++ - Client aus zugreifen. Gibt es irgendwelche Tools, die das Leben für den C/C++ - Client einfacher machen, z. Codegeneratoren? Oder hat jemand einen Vorschlag für eine Alternative?Kann ich einen C/C++ - Client für eine JAX-RS JSON API generieren?
Antwort
Ich habe noch nie von solch einem Werkzeug gehört. Genauer gesagt vermute ich, dass ein solches Werkzeug (ein C/C++ - Generator für JSON) unpraktisch ist.
Es gibt eine Reihe von Gründen. Einige der wichtigsten sind:
Ein Schlüsselproblem ist, dass JSON keine Schemas hat. Dies bedeutet, dass ein API-Generator auf Beispielnachrichten zurückgreifen und versuchen müsste, abzuleiten, welche Felder zu erwarten sind und welche Typen sie haben. Dies kann in manchen Fällen schwierig und sogar theoretisch unmöglich sein.
In Sprachen wie Java und C# gibt es geradlinige "richtige Wege", um Objekt-APIs zu generieren; z.B. die JavaBeans-Konventionen. In C++ und insbesondere C sind die Konventionen nicht vorhanden, und es gibt kompliziertere Probleme wie Containerprotokolle und Speicherverwaltung.
In Sprachen wie Java und C# sind Runtime type-safe, und verschiedene Sprachlevel-Mechanismen werden zur Verfügung gestellt, die es ermöglichen, dynamische Programmierung zu verwenden, um die JSON-schemalose Natur zu behandeln. In Java zum Beispiel gibt es Reflektion, Proxy-Klassen, dynamische Code-Generierung und dynamisches Laden von Code, die alle im Umgang mit JSON helfen können. In C und C++ sind diese Mechanismen im Allgemeinen nicht verfügbar.
Kurz gesagt, wenn Sie C oder C++ verwenden, sind JSON-Bibliotheken so gut wie es geht.
Followup
als Kommentar darauf hinweist, kann dies möglich sein, im Rahmen einer spezifischen JAX-RS-basierte Server-Implementierung zu implementieren. Sie müssten die internen Metadaten abrufen, die JSON-Zuordnung darauf anwenden und daraus C/C++ - APIs generieren. Die Probleme sind:
- Die Generatorimplementierung würde plattformspezifisch sein.
- Der C/C++ - basierte Client wäre nicht in der Lage, Änderungen am effektiven Schema ohne Neugenerierung der APIs und entsprechender Client-Code-Änderungen zu bewältigen.(Im Gegensatz dazu kann eine JSON-Bibliothek-basierte Lösung theoretisch so programmiert werden, dass sie mit unerwarteten neuen Attributen umgehen kann usw.)
- Sie haben immer noch das Container/Speicherverwaltungsproblem zu lösen.
Was Sie brauchen, ist Ihre Wahl der Bibliothek zum Senden und Empfangen von http-Anfragen und einem JSON-Parser. Nichts wird Code generieren, um es einfacher für Sie zu machen, weil die Idee einer solchen API darin besteht, JSON auszuspucken. Der Sinn von JSON besteht darin, Sprach- und Transportbarrieren konsequent zu überwinden. Ein bisschen wie XML, aber einfacher. Diese Frage könnte Sie auch interessieren: what's the best json parser? JSON Spirit Sieht aus wie ein besonders guter Artikel.
Jetzt, da Sie REST verwenden, müssen Sie nur noch mit den richtigen URLs kommunizieren. Erledigt.
Das letzte, was Sie entscheiden möchten, ist, welche Bibliothek für die Netzwerkkommunikation zu verwenden ist. Boost wäre die Empfehlung vieler Leute, da bin ich mir sicher.
Ich weiß, wofür JSON ist und dass es Bibliotheken dafür gibt, aber ich möchte nicht den ganzen Code schreiben, der es in C/C++ - Strukturen/Klassen parst. Und ich will auch nicht alles wieder ändern, wenn es eine neue Klasse oder ein neues Feld gibt. Deshalb suche ich nach einer automatisierten Lösung. – FelixM
- 1. Kann ich einen Spring Feign-Client mit Multipart-Parametern generieren?
- 2. JSON-Schema für ASP.Net-Web-API generieren
- 3. Apache CXF - jaxrs Client Federkonfiguration (Injizieren Proxies)
- 4. Wo kann ich einen Client JSON-Dateien bearbeiten lassen?
- 5. Anpassen der JSON-Serialisierung mit JaxRS
- 6. Wie kann ich JavaScript-API-Dokumentation für GitHub generieren Seiten
- 7. Kann Access-Token für flipkart API nicht generieren
- 8. JAXRS + JerseyTest einen REST-Dienst testen
- 9. Wie kann ich einen Desktop-Client für Google Drive erstellen?
- 10. cxf Service Endpunkt Jaxrs für mehrere Beans
- 11. google-api-php-Client: Ungültige Client geheimen JSON-Datei
- 12. Welche Windows-API wähle ich für eine Rich-Client-Anwendung?
- 13. Kann ich eine Service-Referenz für einen REST WCF-Service automatisch generieren?
- 14. Wie kann ich eine GUID für eine Zeichenfolge generieren?
- 15. Zugriff auf eine sichere Web-API über einen WPF-Client
- 16. Wie kann ich alle möglichen LINQ-Strings eines JSON-Objekts für Json.net generieren?
- 17. Wie kann ich Json von Respond_to-Methode in Schienen generieren?
- 18. Wie kann ich eine Registrierungszertifizierung für Zahnrad S2 generieren?
- 19. Wie teste ich einen API-Client mit Python?
- 20. Generieren einer clientspezifischen Verifikationsnummer für einen Webdienst
- 21. Python (Django) Shopify API Client - Für einen Anfänger
- 22. Möglich, den Paketnamen beim Generieren von Client-Code zu ändern
- 23. Wie teste ich einen API-Controller richtig, der JSON für eine Nicht-Null-Antwort zurückgibt?
- 24. Wie kann eine JSON RESTful-API sowohl für mobile als auch für AJAX-Aufrufe geschützt werden?
- 25. Erhalten Sie Untertitel "cc" für Youtube-Video
- 26. Generieren einzelner JSON-Datei für zwei Tabellen
- 27. Wie erstelle ich einen Siesta-Transformer für einen API-Endpunkt, der ein JSON-Array enthält?
- 28. JaxRS Exception Mapper nicht gefunden
- 29. von JSON generieren Datenrahmen
- 30. Generieren Swagger UI-Dokumentation für REST-API
Ich bin sicher, Sie haben Recht, wenn Sie nur JSON in Betracht ziehen. Ich glaube jedoch, dass es bei JAX-RS ein Java-basiertes Schema geben würde, aus dem Wertobjekte in einer anderen Sprache generiert werden können. Ich denke, die Frage ist mehr, wenn es jemand schon getan hat. JBoss RestEasy behauptet, dass sie etwas in Java bereitgestellt haben. – FelixM