2012-03-20 20 views
21

Sto provando a fare un servizio Web JSON Restful in C/C++. Ho provato Axis2/C e Staff, che funzionano perfettamente per serializzazione/deserializzazione XML ma non per JSON.Modi per implementare un servizio JSON RESTful in C/C++

+6

Bella domanda ma segui il mio consiglio: se riesci a fare questo servizio Web in Java (o in un altro ambiente orientato al servizio web), fallo. Lavorare con materiale di basso livello che offre C++ è ottimo per l'apprendimento, ma ti rallenterà nella maggior parte dei casi. – Poni

+0

Poni ha ragione. Anche se tu "fai il tuo personale" servizio Java, (usando, diciamo, Jetty e Gson) puoi ottenere qualcosa di semplice in poche ore, ho trovato. Ci possono essere delle strutture là fuori che fanno tutto il materiale del servlet per te, ma non ti viene in mente nulla immediatamente. – Tom

+1

@poni e Tom. Che dire della velocità, e se volessi scrivere un quadro JSON e volessi che fosse dannatamente veloce? Non sarebbe c \ C++ essere una buona idea? – gideon

risposta

3

Si potrebbe guardare ffead-cpp. Oltre a fornire supporto per i servizi web json e restfull, include anche più funzionalità. Tuttavia, questo quadro potrebbe essere troppo pesante per la tua situazione.

1

C'è un JIRA project risolto il supporto di JSON in AXIS2/C.
Ho implementato il mio progetto e sono riuscito con lo scrittore (convenzione di Badgerfish), ma sto ancora cercando di gestirlo con il lettore.
Sembra più complicato gestire lo stack in memoria.

+0

In realtà, non è stato risolto. Risoluzione "Non risolverà". Questo perché questa patch: 1) per la vecchia Axis2/C-1.3, 2) è molto instabile e non funziona affatto, 3) Solo per Windows. – loentar

3

Prova ngrest. È un semplice framework di servizi Web JSON RESTful C++ fast. Può essere distribuito su Apache2, Nginx o un proprio semplice server http.


Per quanto riguarda Axis2/C con JSON. Sembra che Axis2/C ufficiale non sia più mantenuto. Quindi Axis2/C diventa obsoleto (ma funziona ancora).

Il supporto JSON per Axis2/C è disponibile nel progetto axis2c-unofficial.

Esistono manuali di installazione su come installare Axis2/C con supporto JSON sotto Linux, Windows using binary package, Windows from source code.

Si può provare con WSF Staff utilizzando Clienti (REST) ​​esempio in modalità JSON (disponibile dalla directory staff/samples/rest/webclient del codice sorgente del personale).

1

JSON e JSONPath sono supportati sia per C che per C++ in gsoap con un nuovo code generator and a new JSON API per iniziare rapidamente.

Diversi JSON, JSON-RPC and REST examples sono inclusi. La gestione della memoria è automatica.

Il generatore di codice può essere utile. Prendiamo ad esempio il json.org menu.json frammento:

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

Il comando gsoap jsoncpp -M menu.json genera questo codice per popolare un valore 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()"; 

lettura anche valori JSON analizzato ed il codice JSONPath può essere generato da questo strumento.

EDIT

Per chiarire, la linea di comando generatore di codice jsoncpp mostra il codice API per leggere e scrivere dati JSON utilizzando un file .json come modello, che ho trovato è utile per risparmiare tempo di scrivere il codice API per popolare ed estrarre i dati JSON. Il codice di query JSONPath può anche essere generato con questo strumento.

2

Per il servizio Web C++, io sto usando il seguente stack:

Problemi correlati