Section courante

A propos

Section administrative du site

Les premiers pas

Découvrir un nouveau cadre d'application peut être intimidant, surtout sans personne pour vous accompagner dans les phases difficiles. Nous espérons que cette page vous permettra de franchir ces étapes sans difficulté et de développer des services performants.

Installation

Si vous n'avez pas encore installé Halcyon, lisez la page d'Installation.

Démarrer une nouvelle application

Si vous connaissez Rails ou Merb, vous savez que vous pouvez commencer à travailler sur une nouvelle application très facilement en exécutant une commande simple, similaire à rails app_name. Halcyon propose une commande similaire.

Exécutez la commande suivante en ligne de commande (assurez-vous d'être dans un répertoire où vous acceptez la création de votre projet) :

$ halcyon init app_name

Cela générera une sortie similaire à la suivante :

create
create  app
create  app/application.rb
create  config
create  config/config.yml
create  config/init
create  config/init/environment.rb
create  config/init/hooks.rb
create  config/init/requires.rb
create  config/init/routes.rb
create  lib
create  lib/client.rb
create  Rakefile
create  README
create  runner.ru
create  log

Cela vous montre quels fichiers ont été créés, mais surtout, ceux avec lesquels vous allez travailler.

Maintenant, accédez au répertoire app_name :

$ cd app_name

Vous êtes désormais l'heureux propriétaire d'une toute nouvelle application Halcyon. Il est temps d'exécuter git init pour commencer à suivre votre application sous le contrôle des révisions Git.

Remarque : Avec halcyon init -g, le nouveau répertoire de l'application sera initialisé comme un nouveau dépôt Git. -G validera les fichiers initiaux.

Exécution des applications Halcyon

Alors, avec notre toute nouvelle application, voyons à quoi ressemble l'exécution de notre application :

halcyon start -p 4647

Cela indique à Halcyon de démarrer l'application Halcyon à l'aide de l'utilitaire rackup de Rack ou de l'utilitaire thin start de Thin (si Thin est installé), ainsi que du port sur lequel exécuter le serveur.

Vous verrez le résultat suivant :

(Starting in /path/to/app_name)
DEBUG [2008-05-27 19:51:39] (9250) AppName :: Init: Requires
DEBUG [2008-05-27 19:51:39] (9250) AppName :: Init: Hooks
DEBUG [2008-05-27 19:51:39] (9250) AppName :: Init: Routes
DEBUG [2008-05-27 19:51:39] (9250) AppName :: Init: Environment
DEBUG [2008-05-27 19:51:39] (9250) AppName :: Load: Application Controller
 INFO [2008-05-27 19:51:39] (9250) AppName :: Starting up...
 INFO [2008-05-27 19:51:39] (9250) AppName :: Define startup tasks in config/init/hooks.rb
DEBUG [2008-05-27 19:51:39] (9250) AppName :: Starting GC.
 INFO [2008-05-27 19:51:39] (9250) AppName :: Started. PID is 9250

Cela vous en dit plus sur son processus de démarrage et vous permet de savoir quand il est prêt à accepter des connexions.

Dans une autre fenêtre d'interpréteur de commande, tout en laissant votre application Halcyon active, exécutez la commande suivante :

1 $ irb -r rubygems -r halcyon
2 >> client = Halcyon::Client.new('http://localhost:4647/')
3 => #<Halcyon::Client ...>
4 >> client.get('/time')
5 => {"status"=>200, "body"=>"Tue May 27 19:53:15 -0500 2008"}
6 >> exit

Après avoir requis la bibliothèque Halcyon, nous créons une instance de Halcyon::Client et lui indiquons où se connecter.

Une fois le client créé, nous pouvons exécuter des requêtes à l'aide des types de requêtes HTTP standard : GET, POST, PUT et DELETE. Il suffit d'appeler get('/time') qui est routé vers l'action temporelle du contrôleur d'application, dans le fichier app_name/app/application.rb.

Ne vous inquiétez pas, vous pourrez intégrer les requêtes get et post dans vos propres méthodes client personnalisées et exécuter les actions correspondantes dans l'application Halcyon.

Modification des contrôleurs de votre application

Contrôleurs

Les contrôleurs d'Halcyon héritent tous de Halcyon::Controller, fournissant plusieurs méthodes utiles pour répondre à différentes situations, comme la méthode ok pour répondre avec la réponse HTTP standard 200 OK, accompagnée des données nécessaires.

Par exemple, un contrôleur pourrait ressembler à ceci :

  1. class Messages < Application
  2.   def new
  3.     # répondre avec des champs acceptables
  4.     ok Model.columns
  5.   end
  6.   def create
  7.     msg = Message.create(params.merge(:tags => params[:tags].join))
  8.     msg.save
  9.     ok msg.id
  10.   end
  11.   def read
  12.     ok Message[params[:id]]
  13.   end
  14.   def update
  15.     Message.filter(:id => params[:id]).update(params)
  16.     ok
  17.   end
  18.   def delete
  19.     Message.filter(:id => params[:id]).delete
  20.     ok
  21.   end
  22. end

Message fait référence à un modèle Sequel, nous permettant de communiquer avec la table des messages. Il peut s'agir aussi bien d'un modèle Sequel, d'un modèle ActiveRecord ou d'un modèle DataMapper.

Routes

Une partie du développement d'une application Halcyon consiste à écrire les contrôleurs, mais les requêtes doivent être routées vers les actions appropriées.

Par défaut, aucune route n'est définie pour une application, mais il est possible de définir rapidement des routes correspondant à n'importe quelle variation de /:controller/:action/:id, etc. Voici un exemple, incluant également une route personnalisée :

  1. ## /path/to/app_name/config/init/routes.rb
  2. Halcyon::Application.route do |r|
  3.   r.match('/api/:version/:controller/:action(/:id)?').to()
  4.   r.default_routes
  5. end

Clients

Le moyen le plus simple de communiquer avec votre application Halcyon est d'utiliser un client Halcyon. Par défaut, il permet d'exécuter facilement des requêtes GET, POST, PUT et DELETE sur les routes applicatives, mais peut être étendu avec des méthodes correspondant facilement à vos routes. Par exemple :

  1. >> class MessageClient < Halcyon::Client
  2. *>   def create(params)
  3. *>     post("/api/1.0/messages/create", params)
  4. *>   end
  5. *> end
  6. >> Message = MessageClient.new('http://localhost:4647/')
  7. => #<MessageClient>
  8. >> Message.create(:message => 'Premier test.', :tags => ['test', 'first'])
  9. => {'status' => 200, 'body' => {:id => 1}}
  10. >> Message.post("/api/1.0/messages/create", :message => 'Deuxième test.', :tags => [])
  11. => {'status' => 200, 'body' => {:id => 2}}

Vous pouvez également intégrer des clients à vos modèles existants.



Dernière mise à jour : Dimanche, le 16 octobre 2016