2010-12-17 1 views
1

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

0

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:

    1. Die Generatorimplementierung würde plattformspezifisch sein.
    2. 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.)
    3. Sie haben immer noch das Container/Speicherverwaltungsproblem zu lösen.
    +0

    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

    0

    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.

    +0

    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

    Verwandte Themen