Progettazione dell'API HTTP C ++

2

Ho un'enorme libreria scritta in C ++ che gestisce molte operazioni matematiche, l'uso di C ++ lo rende veloce e in tutta onestà, non voglio riscrivere l'intera funzionalità.

Sto pensando di aprire questa libreria ad altri linguaggi web (come PHP) e passerò i dati tra i due usando JSON.

Il problema, non ho avuto molta esperienza nella progettazione / sviluppo di un'API in C ++ e dal pensare all'implementazione ho trovato questo:

È possibile accedere all'API da un URL HTTP: http://localhost/api/ e passare in esso comandi diversi. Ad esempio: getDeter .. Che so come farò con PHP.

Il problema che sto avendo una difficile comprensione è come visiterà http://localhost/api in C ++? C'è un altro approccio per fare questo:

  • Compilare il C ++ in un file di output main.out
  • Avere una funzione in PHP che chiama un comando ./main.out [command] [arg]
  • Restituisce la risposta

Non volevo fare questo approccio perché non penso che sia molto pulito, ma non riesco a pensare a un'alternativa alla risoluzione di questo problema.

P.S. Non voglio davvero aprire il codice C ++ di base e apportare modifiche. Mi piacerebbe fare quanto segue (in C ++)

function calculateDeter(std::vector<double> input)
{
    // call library function 
    // call another library function 

    // return json data

} 
    
posta Phorce 19.10.2015 - 20:49
fonte

1 risposta

2

La tecnica che stai descrivendo è (molto approssimativamente) simile a CGI , un modo per i web server di chiamare codice esterno di qualsiasi tipo. PHP in genere viene eseguito come un'applicazione CGI. Se dovessi implementarlo in questo modo, un buon punto di partenza sarebbe guardare la FCGI documentazione. In breve, è possibile utilizzare la libreria FCGI per scrivere un'interfaccia per un server Web per chiamare il proprio codice C ++.

Un altro approccio sarebbe quello di incorporare un server HTTP direttamente nella tua applicazione. Questo è un po 'più semplice, poiché elimina la necessità di un server web separato, ma ti lascia per affrontare problemi come scalabilità e sicurezza che un server web completo includerà fuori dagli schemi. Se percorri questa strada potresti utilizzare una libreria come libevent .

    
risposta data 19.10.2015 - 21:41
fonte

Leggi altre domande sui tag