Comment implémenter un service RESTful JSON en C/C++

j'essaie de faire un service Web JSON Restful en c/" class="blnk">C/C++. J'ai essayé Axis2/C et Staff, qui fonctionnent très bien pour la sérialisation/deserialisation XML mais pas pour JSON.

21
demandé sur jllodra 2012-03-20 18:18:26

7 réponses

Vous voudrez peut-être jeter un coup d'oeil à Casablanca présenté par Herb Sutter blog.

10
répondu Philipp 2012-10-30 08:06:57

regarder ffead-cpp. En plus de fournir un support pour les services web JSON et restfull, il comprend également plus de fonctionnalités. Ce cadre peut être trop lourd pour votre situation.

3
répondu Rutix 2012-03-24 23:16:27

ngrest. C'est un simple mais rapide C++ RESTful JSON Web Services framework. Il peut être déployé sur Apache2, Nginx ou sur son propre serveur http.


concernant Axis2 / C avec JSON. Il semble que L'officiel Axis2 / C n'a plus maintenu. Ainsi Axis2 / C devient obsolète (mais fonctionne toujours).

le support JSON pour Axis2 / C est disponible en axis2c-non officiel projet.

Il y a un manuel d'installation sur la façon d'installer Axis2 / C avec le support JSON sous Linux,Windows utilisant le paquet binaire,Windows à partir du code source.

Vous pouvez l'essayer avec le personnel de WSF en utilisant L'exemple Customers (REST) en mode JSON (qui est disponible à partir de staff/samples/rest/webclient répertoire du personnel de code source).

3
répondu loentar 2016-08-16 16:05:47

pour le service web C++, j'utilise la pile suivante:

2
répondu gliatsos 2018-01-11 10:21:35

il y a un projet JIRA résolu le support de JSON dans AXIS2 /C.

J'ai mis en œuvre dans mon projet et j'ai réussi avec l'écrivain (convention Badgerfish), mais j'essaie toujours de gérer avec le lecteur.

Il semble plus compliqué de gérer la pile dans la mémoire.

1
répondu Marija Radezova 2012-10-30 08:17:52

JSON et JSONPath sont supportés pour C et c++ dans gsoap avec un nouveau générateur de code et une nouvelle API JSON pour vous mettre en route rapidement.

plusieurs JSON, JSON-RPC and REST examples sont inclus. Gestion de la mémoire est automatique.

Le générateur de code peut être utile. Prenez par exemple le json.org menu.json extrait de code:

{ "menu": {
    "id": "file",
    "value": "File",
    "popup": {
      "menuitem": [
        {"value": "New", "onclick": "CreateNewDoc()"},
        {"value": "Open", "onclick": "OpenDoc()"},
        {"value": "Close", "onclick": "CloseDoc()"}
      ]
    }
  }
}

la commande gsoap jsoncpp -M menu.json génère ce code pour remplir un Valeur JSON:

value x(ctx);
x["menu"]["id"] = "file";
x["menu"]["value"] = "File";
x["menu"]["popup"]["menuitem"][0]["value"] = "New";
x["menu"]["popup"]["menuitem"][0]["onclick"] = "CreateNewDoc()";
x["menu"]["popup"]["menuitem"][1]["value"] = "Open";
x["menu"]["popup"]["menuitem"][1]["onclick"] = "OpenDoc()";
x["menu"]["popup"]["menuitem"][2]["value"] = "Close";
x["menu"]["popup"]["menuitem"][2]["onclick"] = "CloseDoc()";

aussi la lecture des valeurs JSON parsées et le code JSONPath peut être généré par cet outil.

EDIT

pour clarifier, le ligne de commande jsoncpp le générateur de code affiche le code API pour lire et écrire des données JSON en utilisant un .fichier json comme un modèle, que j'ai trouvé est utile pour gagner du temps pour écrire le code de l'API pour remplir et d'en extraire les données JSON. Le code de requête JSONPath peut aussi être généré avec cet outil.

1
répondu Dr. Alex RE 2016-02-27 17:43:06

Vous pouvez prendre un coup d'oeil à webcc.

c'est une bibliothèque de client et de serveur légère c++ REST et SOAP basée sur Boost.Asio (1.66+).

C'est très prometteur et activement développé.

il y a de bons exemples pour montrer comment créer un serveur et un client.

les Avantages:

  • le code est extrêmement propre (suivant strictement le style C++ de Google).
  • Pas de fuite de mémoire selon le test VLD.
  • API faciles à utiliser.
  • etc.

Inconvénients:

  • pas encore de support SSL.
  • ne peut pas être déployé sur des serveurs Web existants comme Nginx car il gère son propre serveur HTTP.
1
répondu Adam Gu 2018-07-18 01:57:07