55 votes

Comment puis-je mettre en œuvre un service web RESTful à l'aide de C++ ?

Je dois développer un service Web à forte intensité de calcul (disons que nous effectuons de très gros calculs matriciels) et j'ai pensé que la meilleure solution était de le coder en C++. Je ne peux pas créer un wrapper utilisant SWIG ou JNI en Java pour bénéficier des bibliothèques WS existantes, car les calculs dépendent de l'état et impliquent de grandes matrices. Faire passer ces valeurs de haut en bas ne semble pas très efficace. La question est donc la suivante : comment puis-je créer un tel service Web en C++ ou comment abordez-vous ce problème ?

Merci d'avance

46voto

DSO Points 5942

Vous devez diviser votre application en deux parties : 1) un frontal web et 2) une logique métier. La logique métier sera votre code C++. Vous n'avez vraiment pas envie d'implémenter votre frontal web en C++, sauf si vous avez beaucoup de temps libre et de patience. Heureusement, il existe de nombreux frameworks web basés sur des langages plus modernes. Mon préféré est le nouveau framework ASP.NET MVC parce que je suis un gars de Windows/.NET, mais vous pouvez faire votre choix (ruby on rails, python, java, etc.).

La conception RESTful exige que vous organisiez les fonctionnalités de votre application en tant que ressources et que CRUD les opérations sur ces ressources. Les opérations CRUD correspondent aux méthodes HTTP POST, GET, PUT et DELETE. Un excellent livre sur la conception RESTful est Services Web RESTful ... note que je n'ai pas trouvé beaucoup de livres sur ce sujet.

Une fois que vous avez conçu et implémenté votre API REST dans le frontal web, il existe plusieurs façons de la connecter à votre application C++, dont certaines ont été mentionnées par les posters précédents (par exemple, FastCGI).

P.S. Vous avez mentionné quelque chose à propos de l'état de votre application. Si vous avez besoin d'un état qui persiste à travers plusieurs requêtes HTTP, vous pouvez appliquer certains principes de conception RESTful. Consultez le livre ou faites des recherches sur le Web (désolé, je n'ai pas mes liens favoris sous la main pour le moment).

36voto

Andaris Points 451

Je suis d'accord avec les autres réponses dans la mesure où vous devriez vraiment décomposer votre application en composants séparés pour votre serveur web et les couches d'application. Cela dit, si vous tenez vraiment à mettre en œuvre un service web RESTful intégré à une application C++, il existe les options suivantes :

Personnellement, je n'ai utilisé que libmicrohttpd. J'ai trouvé que c'était une assez bonne bibliothèque pour travailler avec. Elle est petite, rapide et stable (ne laissez pas la version sub-1.0 vous effrayer). Le développeur participe à une liste de diffusion dans laquelle il répond aux questions et aux rapports de bogues. Évidemment, libmicrohttpd est ma recommandation si vous décidez de suivre cette voie.

Poursuivre la route ici -> GNU libmicrohttpd sur Freecode

18voto

Envisager d'utiliser Axis2C qui vous permet de créer des services web SOAP et RESTfull en utilisant C/C++. Il est distribué sous licence Apache (et non GPL), ce qui peut être primordial pour les développeurs commerciaux .....

14voto

TK. Points 359

J'ajouterais le serveur Web Pion à la liste des serveurs Web C++ potentiels à utiliser. http://www.pion.org (construit sur le dessus de boost)

Je l'ai utilisé pour implémenter une interface REST C++ et jusqu'à présent j'ai été très satisfait (bien que la documentation soit un peu légère).

Les seuls éléments que j'ai dû programmer jusqu'à présent sont les transformations de HTTPRequest/Response en structures de données internes.

Comprenez qu'il y a quelques inconvénients à intégrer directement le serveur web C++ :

  1. Les fuites de mémoire dans le système affecteront le serveur web.
  2. Les bibliothèques de sérialisation en C++ sont moins que spectaculaires
  3. La sécurité des threads en C++ est particulièrement importante en raison de la corruption de la mémoire.

13voto

Vinko Vrsalovic Points 116138

Vous pouvez écrire votre programme C++ en suivant le CGI o FastCGI Spécifications que la plupart des serveurs web supportent. Ensuite, il vous suffit de l'héberger dans le serveur web de votre choix (Apache, lighttpd, nginx, etc.).

La partie RESTful n'est qu'une question de conception. En d'autres termes, que ferez-vous des demandes que le serveur web transmettra à votre application ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X