42 votes

Quel est le bon point de départ pour développer des services web RESTful en Clojure?

Je suis à la recherche dans quelque chose de léger, qui, au minimum, devrait soutenir les fonctionnalités suivantes:

  • Prise en charge de la définition des actions par le biais de métadonnées
  • Wrapper qui extrait les paramètres de la demande en clojure carte, ou que les paramètres de la fonction
  • Prise en charge de plusieurs formes d'authentification (de base, de forme, de cookie)
  • autorisation de base en fonction de la méthode de l'api de métadonnées
  • session objet enveloppé dans clojure carte
  • en direct de codage à partir de REPL (pas besoin de redémarrer le serveur)
  • automatique de la sérialisation de la valeur de retour json et xml
  • avez-nice (pluggable) gestion des paramètres d'url (par exemple /action/par1/par2 au lieu de /action?par1=val1&par2=val2)

Je sais qu'il est relativement facile de rouler ma propre micro-cadre pour chacune de ces options, mais pourquoi réinventer la roue si quelque chose comme ce qui existe déjà? Surtout si c'est:

  • Projet en cours avec l'augmentation du nombre de contributeurs/utilisateurs
  • Avoir au moins les bases de la documentation et tutoriel en ligne.

54voto

Michał Marczyk Points 54179

Tout d'abord, je pense que vous êtes peu probable de trouver un seul réduite solution pour faire tout cela en Clojure (sauf sous la forme d'une bibliothèque Java pour être utilisé par le biais de l'interopérabilité). Ce qui est en train de devenir Clojure standard du Web pile comprend un certain nombre de bibliothèques qui se mélangent et assortir de toutes sortes de façons (car ils sont heureux ont tendance à être parfaitement compatible).1

Voici une liste de quelques blocs de construction qui pourraient vous être utiles:

  1. Anneau -- Clojure de base de la requête HTTP de la manipulation de la bibliothèque; tous les autres webby bibliothèques (pour l'écriture de routes &c.) que je connais sont compatibles avec l'Anneau. L'anneau est activement développée, a une forte communauté, est très bien écrit et agréable à SPEC de document exposant sa philosophie de conception. Ce blog fournit un bon exemple de la façon dont il pourrait être utilisé (réagir à GitHub s'engage).

  2. Banc de sable -- actuellement une bibliothèque d'authentification, d'autres types de fonctionnalités de prévu; le sous-développement.

  3. Compojure -- une mature et robuste bibliothèque qui offre une belle DSL pour l'écriture des itinéraires pour être utilisé sur le dessus de l'Anneau. Cela vous donnera la belle gestion des paramètres d'URL.

  4. Compojure-mains -- "une bibliothèque pour la construction d'applications Reposant sur le dessus de Compojure". Compojure-repos est, autant que je peux dire, dans ses premiers stades de développement; vous pourriez peut-être voir cela comme une occasion d'influencer sa conception. :-)

  5. Pour traiter du XML, il y a clojure.contrib.lazy-xml (et l'aide de la bibliothèque clojure.contrib.zip-filter.xml) et Enlive (le haut- clojure.xml de l'espace de noms n'est pas très utilisable); ils pourront être utilisés en tandem (bien que pour vos fins de l'ancienne pourrait suffire).

  6. Pour JSON, il y a une bibliothèque dans contrib et clojure-json (et je pense qu'il y avait au moins une autre lib j'ai l'impression d'oublier maintenant...); choisir celui que vous aimez le mieux.

Tout sera parfaitement à l'aise avec un REPL de développement axée sur le style (voir la accepté de répondre à cette DONC, la question d'un Anneau truc qui est très bien pour le but ici). Je suppose que la collection ci-dessus des liens ne laisser quelques taches aveugles (en particulier, l'authentification de l'histoire est encore aplanies, autant que je puis dire), mais j'espère que c'est un bon début.


1Le seul package de solution pour la construction d'webapps en Clojure que je connaisse est en Conjure, inspiré par les Rails; malheureusement, je dois avouer que je ne connais pas beaucoup, donc si vous vous sentez intéressé, suivez le lien et regardez autour de vous les sources, wiki &c.

7voto

Datageek Points 2846

Lors de la construction de mon premier Clojure service de repos, je me posais souvent la même question. Le Clojure boîte à outils m'a beaucoup aidé: http://www.clojure-toolbox.com/

1voto

Glenn Points 3787

Si vous êtes à la recherche pour certains de l'échantillon, dans le monde réel, des exemples de code pour vous aider à démarrer, vous pouvez étudier ce clojure-news-feed sur github du projet qui montre comment mettre en œuvre un non-trivial service web RESTful avec compojure/anneau qui englobe à la fois SQL (postgresql ou mysql) et NoSQL (cassandra), de recherche (solr), la mise en cache (redis), la journalisation des événements (kafka), le regroupement de connexions (c3po), et les mesures en temps réel via JMX.

Ce blog à propos de la Construction d'une Évolutif Flux d'Actualité Web Service en Clojure fournit une bonne introduction. J'ai couru quelques tests de charge à l'encontre de ce service sur un humble AWS déploiement et a obtenu environ quatre-vingts transactions par seconde avec moins d'une demi-seconde de latence moyenne par transaction.

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