Chanter avec Sinatra

Bienvenue sur la piste 1 de "Chant avec Sinatra." Dans cette mini-série, nous allons examiner Sinatra; un DSL petit mais incroyablement puissant pour la création rapide d'applications Web Ruby. Dans cette partie, nous allons commencer à utiliser Sinatra en manipulant quelques itinéraires, en expliquant comment accéder aux paramètres d’URL et en POST des données entre les pages..

Si vous n'avez jamais travaillé avec Ruby auparavant, vous devriez jeter un coup d'œil à la session Ruby for Newbies, où Andrew vous guidera tout au long du processus d'installation de Ruby sur votre système et de l'apprentissage des bases du langage..

La première chose à faire est d’installer le Sinatra RubyGem. Entrez les informations suivantes dans le terminal:

 bijou installer sinatra

Installez également la gemme 'shotgun', que nous utiliserons plus tard:

 bijou installer fusil de chasse

Selon la configuration de RubyGems sur votre système, vous devrez peut-être préfixer le bijou installer commandes avec sudo.


Les bases

Ouvrez votre éditeur de texte et créez un nouveau fichier nommé basics.rb. Tout en haut, nous devons avoir besoin de RubyGems et du joyau Sinatra:

 nécessite 'rubygems' nécessite 'sinatra'

Remarque: Si vous utilisez Ruby 1.9 (ce que vous devriez être;)), vous pouvez supprimer le besoin de 'rubygems' line as Ruby charge automatiquement RubyGems quand même.

Commençons par créer le classique "Hello World". Ajoutez ce qui suit à votre basics.rb dossier de candidature:

 get '/' do "Bonjour, le monde!" fin

C'est une "route". Ici, nous disons à Sinatra que si la maison, ou la racine, l’URL '/' est demandé, en utilisant la méthode HTTP normale GET, d'afficher "Hello, World!"

Maintenant, dans le terminal, démarrons le serveur en tapant ruby basics.rb. On nous dit que Sinatra a "pris la scène" sur le port 4567, et si nous allons à http: // localhost: 4567 / dans un navigateur, on voit "Hello, World!".

Essayons donc une autre page:

 get '/ about' do 'Un peu de moi.' fin

Chaque fois que vous apportez une modification à votre application Sinatra, vous devez redémarrer le serveur..

Cela signifie que si '/sur' L'URL est demandé (à l'aide de la méthode HTTP GET), "Un peu de moi". Affichera.

Chaque fois que vous apportez une modification à votre application Sinatra, vous devez redémarrer le serveur. Donc, pour nous éviter les tracas d'arrêter et de démarrer constamment le serveur pendant le développement, nous utiliserons le joyau Shotgun que nous avons installé plus tôt..

Arrêtez le serveur Sinatra actuel avec Ctrl-C. Maintenant nous pouvons courir bases de fusil de chasse.rb et Shotgun redémarre automatiquement le serveur chaque fois que nous actualisons la page. Ceci est utile lorsque nous travaillons beaucoup sur le développement, mais au fur et à mesure du redémarrage de l'application, cela peut être lent.

Alors que Shotgun écoute sur un autre port, passons au port 9393 et ​​passons à http: // localhost: 9393 / about dans votre navigateur. Vous devriez voir la phrase que nous mettons.


Accéder aux paramètres d'URL

Vous pouvez également accéder aux paramètres à partir de l'URL. Ajoutez ce qui suit à votre basics.rb fichier:

 obtenez '/ hello /: name' do params [: name] end

Dans cet exemple, nous avons un itinéraire où quoi que ce soit après '/Bonjour/' sera contenu dans un params tableau avec la clé :prénom. le params tableau contient toutes les variables GET et POST. Si vous venez d'un contexte PHP, c'est similaire à la $ _REQUEST tableau global.

Dans le navigateur, allez à, par exemple, http: // localhost: 9393 / hello / dan et vous devriez voir le nom affiché en retour ("dan").

Vous pouvez intégrer le :prénom dans une chaîne en l'enveloppant dans $ ? . Essayez de remplacer le params [: nom] aligner avec:

 "Bonjour, # params [: name]."

Comme vous vous en doutez, nous pouvons utiliser toutes les méthodes Ruby normales sur la variable, telles que .haut de gamme, .sens inverse etc.

 "Bonjour à vous # params [: name] .upcase."

Vous pouvez configurer la route pour accepter plusieurs variables de chaîne de requête, comme suit:

 get '/ hello /: name /: city' faites "Hey # # params [: name] à partir de # params [: city]." fin

En plus des variables normales dans une URL, Sinatra vous permet d'inclure la récupération de chaînes de requête génériques, appelées 'splat', en utilisant un astérisque comme suit:

 get '/ more / *' do params [: splat] end

Tout ce qui est inclus dans l'URL après /plus/ sera accessible à travers le : splat clé dans le params tableau.


Afficher les fichiers et POST

Faisons maintenant quelque chose d'un peu plus intéressant. Créons un formulaire pour récupérer les données de l'utilisateur, puis faisons quelque chose avec. Nous utiliserons également un "fichier de vue", qui nous permet de scinder le balisage d'une vue dans un fichier séparé. Ajoutez l’itinéraire suivant à votre basics.rb fichier d'application:

 get '/ form' do erb: forme fin

Cet itinéraire chargera le form.erb ERB (Embedded Ruby) depuis un fichier vues / annuaire. Les fichiers ERB sont généralement des fichiers HTML normaux qui vous permettent d’inclure du code Ruby dans les balises, qui seront analysées avant d'être envoyées au navigateur - exactement comme vous incluez du code PHP ou ASP dans une page Web.

Alors créez un vues / répertoire dans le même dossier que le basics.rb fichier. Et à l'intérieur vues /, créer le fichier nommé form.erb avec le contenu suivant à l'intérieur:

 bonjour de la vue

Pointez votre navigateur sur http: // localhost: 9393 / form et vous devriez voir le message que nous avons défini dans le fichier view.

Maintenant que nous savons que tout fonctionne, modifiez le contenu de ce fichier en:

 

Actualisez la page et vous devriez voir le formulaire:

Cependant, entrez un message dans la zone de texte et cliquez sur le bouton d'envoi. La page d'erreur de Sinatra vous indiquera qu'il n'existe pas de route pour cette URL..

Vous vous demandez peut-être pourquoi, étant donné que le formulaire est soumis à /forme, La même URL que le formulaire est sur, donc il ne devrait pas y avoir de problème. Eh bien, la différence est que nous récupérons cette page via la méthode HTTP POST - et comme vous pouvez le constater sur la page d'erreur présentée par Sinatra, Sinatra nécessite un itinéraire différent pour chaque méthode HTTP..

Ajoutez donc l'itinéraire suivant à l'application Sinatra:

 post '/ form' do "Vous avez dit '# params [: message]'" end

Cet itinéraire est destiné à la méthode POST et non à GET. De plus, toutes les variables POST sont disponibles dans le même params tableau en tant que variables GET, afin que nous puissions récupérer le message soumis avec le formulaire. Essaye le!


Vous pouvez travailler totalement pour le MI5 maintenant!

Quoi ensuite? Créons un moyen de "chiffrer" un message que nous envoyons afin qu'il ne puisse être lu que par notre destinataire. Ajoutez l'itinéraire suivant à l'application Sinatra:

 get '/ secret' do erb: fin secrète

Vous avez probablement compris le problème maintenant. Cette route chargera le fichier de vue ERB à views / secret.erb. Créez ce fichier de vue avec les éléments suivants:

 

Super secret MI5 Message Encryptor!

Et créez la route pour la méthode POST:

 post '/ secret' do params [: secret] .reverse end

OK, nous avons maintenant un crypteur de message qui utilise une méthode spéciale 'inverse' pour rendre le message apparemment illisible. Nous avons besoin d'un moyen de décrypter le message:

 obtenir '/ decrypt /: secret' faire params [: secret] .reverse end

Voilà! Un crypteur de messages ultra-secret et hautement sécurisé convient assez bien aux agences de renseignement d'un pays.

Avertissement légal: Lorsque nous parlons de "hautement sécurisé" et de "cryptage", nous inversons simplement les lettres. Pardon.


FourOhFour?

Une dernière chose que nous aborderons est 404 pages d'erreur. À l’heure actuelle, si vous accédez à une URL pour laquelle il n’existe pas de route (par exemple,. / danisthebest), vous verrez le message d'erreur original de Sinatra. Sur une application réelle, nous voudrions afficher notre propre erreur. Pour ce faire, utilisez simplement le pas trouvé itinéraire, comme si:

 not_found ne statut 404 'non trouvé' fin

Ici, nous utilisons Sinatra statut méthode pour définir le code d'état HTTP de la page sur 404 (vous pouvez utiliser cette même méthode pour définir n'importe quel code d'état, tel que 201 lorsqu'un élément est créé ou 403 en cas d'échec de la connexion).

Vous pouvez en outre refactoriser le pas trouvé route en utilisant Sinatra arrêt méthode:

 not_found ne s'arrête 404, 'page non trouvée' fin

Conclusion

Tu as donc joué ton premier duo avec Sinatra! J'espère que vous pourrez voir à quel point cette solution DSL facilite la création d'applications Web..

Sur la piste suivante, nous allons créer une application simple "à faire" connectée à une base de données SQLite. Nous allons également jeter un oeil à l'insaisissable METTRE et SUPPRIMER HTTP méthodes dont personne n'a entendu parler.

Remarque: Vous pouvez parcourir les fichiers du projet final pour ce tutoriel sur GitHub.