Comment implémenter un service RESTful JSON en C/C++
7 réponses
Vous voudrez peut-être jeter un coup d'oeil à Casablanca présenté par Herb Sutter blog.
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).
pour le service web C++, j'utilise la pile suivante:
- ipkn/corneille C++ micro web framework
- nlohmann / json pour la sérialisation/désérialisation json.
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.
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.
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.