この投稿では、APIの迅速かつ簡単な開発のために設計されたルビーベースのWebフレームワークであるGrapeを紹介し、Web開発の最新のトレンドを踏まえたRailsの運命について少し説明します。
Ruby = Ruby On Rails
この非常にウェブ開発に関係する多くの人々の前でルビーをウェブ開発の手段として(そして単にスクリプト言語として)言及するとき、それは悪名高い白いレールのロゴではないにしても、どういうわけか起こりました赤い背景、そして確かに魔法のフレーズRuby On Rails。
これが良いか悪いかを議論するつもりはありません-この記事は議論のためではありません。 確かに言えることは1つあります。RoRは一般にWebフレームワークの開発に大きな影響を与え、この貢献を過大評価することは非常に困難です。
しかし、
しかし、人生は静止していません。
Webはダイナミックになり、モバイルアプリケーションはますます重要になっています。ユーザーは「キャッシュデスクを離れることなく」、つまりiPhone、Google Nexus、Huawei、enter_name_of_phoneの画面からコンテンツを消費する必要があります。
また、サイト自体には、ユーザーインタラクションの組織とコンテンツの表示に対する質的に新しいアプローチが必要です。
AngularJS、Ember、Meteor.js、Derby.jsは、サイト構築における次のブレークスルーを予測するテクノロジーであり、古き良き時代のAJAXの「発明」と比較することができます。
Ruby開発者は、かつてRoRが通常のサイト用になったAPIを開発するための強力で同時に習得しやすいツールを必要としています。
ポイントに行きましょう!
確かに、十分な推論。 会う- ブドウ
これはAPI開発用のフレームワークであり、スイスのナイフはありません。
しかし、私たちは敬意を払わなければなりません、彼はAPIを非常にうまく行うことができます。
私はその主な利点をリストしようとします:
- API DSL
- すぐに使用できるAPIバージョン管理
- ビルトイン検証によるメソッドのパラメーター化
- OPTIONSの自動生成(CORSに会った人-感謝)
- API形式での透過的な作業
- ドキュメント用の組み込みDSL
APIの開発者がGrapeを使用するときに作業を楽にするツールの完全なリストにはほど遠い
コード時間
まず、{hello: 'world'}を/hello/world.jsonに返す簡単なアプリケーションの例を示します
Gemfile
source 'https://rubygems.org' gem 'grape', github: 'intridea/grape' gem 'rack', '~> 1.5.2' gem 'thin', '~> 1.6.2'
hello_world.rb
require 'grape' class HelloWorld < Grape::API format :json namespace :hello do get :world do {hello: 'world'} end end end
config.ru
require_relative 'hello_world' run HelloWorld
16 GBのメモリとHDDを搭載したi5では、このアプリケーションは400〜700ミリ秒で起動します。 使用される宝石のリストは次のとおりです。
Using i18n 0.6.11 Using json 1.8.1 Using minitest 5.4.1 Using thread_safe 0.3.4 Using tzinfo 1.2.2 Using activesupport 4.1.6 Using descendants_tracker 0.0.4 Using ice_nine 0.11.0 Using axiom-types 0.1.1 Using builder 3.2.2 Using coercible 1.0.0 Using daemons 1.1.9 Using equalizer 0.0.9 Using eventmachine 1.0.3 Using hashie 3.3.1 Using multi_json 1.10.1 Using multi_xml 0.5.5 Using rack 1.5.2 Using rack-accept 0.4.5 Using rack-mount 0.8.3 Using virtus 1.0.3 Using grape 0.9.1 from git://github.com/intridea/grape.git (at master) Using thin 1.6.2
お気づきかもしれませんが、Grapeには名前空間という素晴らしいものがあります。 彼女はグループ、リソース、リソース、セグメントであり、すべてコードを読むのに便利です。
ただし、パラメータなしで使用できます。 どうしてだろう? 次に例を示します。
namespace :authorized do before { authorize! } get :some_secret_data ... end group do before { authorize! } get :some_secret_data ... end
映画のようです-「ラスベガスで起こったことはすべて、ラスベガスにとどまります」。
グループ内および名前空間内で、これらのグループ(およびそれ以上)で指定されたルートに対してのみ実行されるブロックの前後に定義できます。
以下は、パラメーターの使用を示す例です。
params do requires :first_name, type: String requires :last_name, type: String optional :birth_date, type: DateTime end post :register do ... end
私に関しては、言葉がなくても明らかです。 説明された条件を満たすパラメーターが要求とともに転送されない場合、管理はルートに到達しません。 最良の部分は、最小限の変更でこれらすべてを使用してAPIを文書化できることです。 例:
desc 'User signup' params do requires :first_name, type: String, desc: 'First name' requires :last_name, type: String, desc: 'Last name' optional :birth_date, type: DateTime, desc: 'Date of birth' end post :register do ... end
私たちはすぐにウサギの群れを殺します-コードは所定の場所に文書化され、ブドウの盗品を接続することにより、スワガー互換のドキュメントが得られます。 コードを変更-ドキュメントが変更されました。
グレープで私を獲得した多くの素晴らしいものの1つはマウントです。 前述のAPIを新しい場所にマウントできます。
mount.rb
class Mount < Grape::API get :mounted do {mounted: true} end end
mount.rb
require 'grape' require_relative 'mount' class HelloWorld < Grape::API format :json namespace :hello do mount Mount get :world do {hello: 'world'} end end end
すでに理解しているように、Mountクラスからのルートは/hello/mounted.jsonで利用できます
「漠然とした疑いは私を苦しめる...
もちろん、永続的なあくび反射を引き起こさない平均的な記事の量は、フレームワークのすべての長所と短所を伝えるのに十分ではありません。 そもそも私の仕事はあなたに興味を起こさせることでした-プロジェクトの文書化は悪くなく、さらなる研究に困難はないはずです。
また、githubページでは、grapeと組み合わせて使用できる宝石のリストを見つけることができます。
エピローグ
最近まで、プロジェクトには開発モードでの変更されたコードの自動リロードに関連する小さな問題がありました。 すべてのRails開発者はそれに慣れており、私の意見では、これは必須の機能です。 githubの問題では、この問題が何度か表明され、Rack :: ReloaderおよびRailsのユースケースでいくつかのソリューションが提供されたようです。
数週間前にリリースされた、プレーンラックスタックでの使用を目的としたグレープリロード gemである、独自のソリューションについて言及することができます。
grapeバージョン0.9.0以前では、gemバージョン0.0.3を使用できます。後で、フレームワークのmasterブランチでは、gemリポジトリのmasterブランチを使用します。
このフレームワークに関するさらなる記事に興味がある場合は、コメントでこれを言及することを忘れないでください。 すべてのルビーに、ポソン!
PS近い将来、データベースを使用してtodoリスト用のAPIを作成する記事を書きます。 この入門記事から、このフレームワークとRailsの違いは何か、なぜSinatraと比較しないのかは明確ではないことを認めます。
次の記事でも、ActiveSupport :: Metal and Grapeのアプリケーションのベンチマークを試みます。