Rails 5 によるAPIの概要・Rails API 5でJSON APIを構築
ご存知のように、API アプリケーションはブラウザにユーザー インターフェイスを持たず、代わりに JSON または XML データ ... のみが表示されます。したがって、API アプリケーションを作成する場合、ライターは、API を使用する開発者、特に QA をサポートするために添付されたドキュメントを作成する必要があります。 ドキュメントを作成するには多くの方法がありますが、最も簡単な方法は、たとえば Excel または Word ファイルに手書きで書き込むことです。この API が何のためにあるのか、それにアクセスするための URL は何なのか、リクエストを送信するデータは何か、返すレスポンス データは何なのかを指定してください... その後、必要に応じて開発者/QA 側に送信します。使う・読みます。 この方法は非常に手作業であり、多くの労力を要しますが、それらを使用する人にもたらされる価値は必ずしも高いとは言えません。なぜなら、単純に統一されたフォーマットがなく、情報が不足しやすいからです。
2021年06月10日
ご存知のように、API アプリケーションはブラウザにユーザー インターフェイスを持たず、代わりに JSON または XML データ ... のみが表示されます。したがって、API アプリケーションを作成する場合、ライターは、API を使用する開発者、特に QA をサポートするために添付されたドキュメントを作成する必要があります。 ドキュメントを作成するには多くの方法がありますが、最も簡単な方法は、たとえば Excel または Word ファイルに手書きで書き込むことです。この API が何のためにあるのか、それにアクセスするための URL は何なのか、リクエストを送信するデータは何か、返すレスポンス データは何なのかを指定してください... その後、必要に応じて開発者/QA 側に送信します。使う・読みます。 この方法は非常に手作業であり、多くの労力を要しますが、それらを使用する人にもたらされる価値は必ずしも高いとは言えません。なぜなら、単純に統一されたフォーマットがなく、情報が不足しやすいからです。
ご存知のように、API アプリケーションはブラウザにユーザー インターフェイスを持たず、代わりに JSON または XML データ ... のみが表示されます。したがって、API アプリケーションを作成する場合、ライターは、API を使用する開発者、特に QA をサポートするために添付されたドキュメントを作成する必要があります。
ドキュメントを作成するには多くの方法がありますが、最も簡単な方法は、たとえば Excel または Word ファイルに手書きで書き込むことです。この API が何のためにあるのか、それにアクセスするための URL は何なのか、リクエストを送信するデータは何か、返すレスポンス データは何なのかを指定してください... その後、必要に応じて開発者/QA 側に送信します。使う・読みます。
この方法は非常に手作業であり、多くの労力を要しますが、それらを使用する人にもたらされる価値は必ずしも高いとは言えません。なぜなら、単純に統一されたフォーマットがなく、情報が不足しやすいからです。
1. Rails 5 のAPI モードの概要
Rails 5 がついに正式にリリースされ、それで、使用する新しい追加機能を見てみましょう。
最初に話すのは、Rails 5 のAPI モードの登場です。これにより、以前にコントローラーに含める必要があった面倒なものを使用することなく、Web API を構築できます。
1.1 Web API とは
API は Application Programming Interfaces の略です。簡単に理解すると、2 つのソフトウェアが相互に通信できるインターフェースです。現在、Web API を構築する為に非常に一般的で使われ、モバイルアプリケーションやJavaScriptアプリケーションのバックエンドとして使用されています。Web API は、HTML の代わりに JSON (または XML) を使用することがよくあります。 JSON は、自動化されたクライアントにとって理解しやすく、使用しやすく、現在、使用する Web API で簡単に見つけることができます。
1.2 Rails5のAPIモードの起源
実際には、この機能はRails 5 に統合された Rails API プロジェクトです。
1.3 Rails 5 のAPI モードの使用方法
単純な Rails API のみのアプリケーションの作成は次のとおりです。
rails new my_app --api
--api を使用することで、生成されたアプリケーションはミドルウェアを削減し、ActionController::API によって ActionController::Base から継承する代わりに、ビュー/ヘルパー/アセットと ApplicationControllers も作成しません。その後、config/application.rb ファイルに追加され、アプリケーションが Web API のみになります。
# config/application.rb
MyApp モジュール
class Application < Rails::Application
config.api_only = true
end
end
そして、通常の RoR アプリケーションとまったく同じようにアプリケーションを簡単に開発できます。そのアプリケーションには、ビュー、ヘルパー、またはアセットはすべて既にクライアント内にあるため、何もありません。ビューの代わりに、おそらくシリアライザーのようなものを使用して JSON ドキュメントを構築します。
1.4 Sinatra や Grape の代わりに Rails API モードを使用するのはなぜ
Grape や Sinatra などのよりコンパクトでシンプルなものを使用するのではなく、Rails を使用して Web API を構築する理由をよく尋ねられます。フレームワークは小さなアプリケーションの構築に対応できますが、ORM、いくつかのビルダー、自動リロード機能などに加えて、使用するライブラリをすばやく見つけることができます。そして最終には、アプリケーションをさまざまなライブラリから構成された巨大な Rails アプリケーションに変えることができます。それは本当に悪いことではありません。このアプローチでは、使用する gem を正確に選択できます。しかし、Rails を使用することを決定することは、他の選択肢に対する適切な選択肢でもあります。さらに、Rails ハンドルには使用できるものがたくさんあり、別の小さなフレームワーク (セキュリティ、条件付き GET、キャッシングなど) を探す必要はありません。
1.5 Rails API モードはいつ使用する
アプリケーションが Web API である場合は、Rails 5 のAPI モードのみを使用したほうがいいです。これは、HTML を送信するのではなく、クライアントが簡単に使用でき、好んで使用できる JSON または XML を送信することを意味します。ラックミドルウェアは、パイプラインのデザインパターンの完全な実装であり、非常に重く、要求と応答のオブジェクト上で実行するためにRoRのに使用されています。
1.6 ミドルウェア
Rack ミドルウェアは、パイプライン設計パターンの完全な実装であり、要求および応答オブジェクトで実行するために RoR で非常に頻繁に使用されます。デフォルトでは、Rails API のみのアプリケーションには限られたミドルウェアが付属しています。これは、それらが不要な機能に削減されていることを意味します。 ミドルウェアの追加は、application.rb ファイルに宣言行を追加するのと同じくらい簡単です。 たとえば、API に Rack::Deflater を追加する場:
# config/application.rb
module Alexandria class Application < Rails::Application
config.api_only = true
config.middleware.use Rack::Deflater
end
次のコマンドを使用して、アプリケーションで使用されているミドルウェアを一覧表示できます。
2 . Rails API を構築するのはJSON API バージョン。
2.1 JSON API とは
JSON API は、リソースに対するクライアント要求を取得または変更する方法と、サーバーがそれらの要求をバックアップする方法の仕様です。
JSON API は、クライアントとサーバーの間で渡される要求の数とデータの量の両方を最小限に抑えるように設計されています。 この効果は、読みやすさと柔軟性を損なうことなく実現されます。
2.2 データをフォーマットする方法
api JSON シリアル化データ には、次のものが含まれている必要があります。
- JSOn API 応答のルート レベルは JSON オブジェクトです。
- このオブジェクトには、トップレベルのデータを持つキーが含まれます。
- キーには、レコードを表す単一の JSON オブジェクト、またはレコードを表す 。JSON オブジェクトのコレクションを指します。データが含まれます。
- JSON オブジェクトは、以下を含むレコードを表します。
- レコードの IDです。
- レコードタイプ、つまりposts や cats などのリソースの名前です。
- そのレコードのプロパティを表すキーと値のペアを含む JSON オブジェクトを指す属性キー。 ここに表示されるプロパティがある場合は、データをシリアル化する方法によって決まります。
- リソースと他の JSON API リソースとの間の関係を説明する JSON オブジェクトを指す関係のランダム キーです。
2.3 Rails 5 API に JSON API を実装する
gem install rails --pre
rails new catbook --api --database=postgresql
JSON API が進むべき道であり、データのフォーマット方法の基本的な理解ができたので、JSON API を構築してみましょう。
2.4 アプリ
Cat の関連のデータとその設定を提供する単純な Rails 5 API を構築します。したがって、私たちのアプリには の主2つ要なリソースがあります: 猫と趣味です。 猫は興味がたくさんあり、趣味は猫がたくさんいます。 私たちは多対多の関係を持っています。
- ステップ1: 開始する
Rails 5 での最初の実行:
次に、先に進み、ディレクトリに 入り 、Gemfile に次の gem を追加します。
gem 'active_model_serializers'
gem 'rack-cors'
次に実行します:
bundle install
次に、JSON API の API アダプターを設定する必要があります。 ファイルを作成する
config/initializers/active_model_serializer.rb
そして確立する:
ActiveModelSerializers.config.adapter = :json_api
これにより、Rails にデータを JSON API 形式でシリアル化するように指示します。
また、データを受信するとき (サーバーへの jhacsh POST データのとき) に JSON API を
受け入れるようにアプリに指示する必要があります。 同じファイルに次を追加します。
api_mime_types = %W(
application/vnd.api+json
text/x-json
application/json)
Mime::Type.register 'application/vnd.api+json', :json, api_mime_types
最後に CORS を設定することを忘れないでください。 Rack-cors gem を使用しています。
- ステップ2:ドメイン モデル
Cat、Hobby、Cat Hobbies のリソースを作成します。 次のプロパティを持つ Cat に移行します。
class CreateCats < ActiveRecord::Migration[5.0]
def change
create_table :cats do |t|
t.string :name
t.string :breed
t.string :weight
t.string :temperament
t.timestamps
趣味:
class CreateHobbies < ActiveRecord::Migration[5.0]
def change
create_table :hobbies do |t|
t.string :name
t.timestamps
end
と猫の趣味:
class CreateCatHobbies < ActiveRecord::Migration[5.0]
def change
create_table :cat_hobbies do |t|
t.references :cat, index: true
t.references :hobby, index: true
t.timestamps
end
次に、関連付けを使用してモデルを設定します。
# app/models/cat.rb
class Cat < ApplicationRecord
has_many :cat_hobbies
has_many :hobbies, through: :cat_hobbies
end
# app/models/hobby.rb
class Hobby < ApplicationRecord
has_many :cat_hobbies
has_many :cats, through: :cat_hobbies
end
# app/models/cat_hobby.rb
class CatHobby < ApplicationRecord
belongs_to :cat
belongs_to :hobby
end
- ステップ 3: ルートとコントローラー
次の方法でルーターの名前空間を設定します。
Rails.application.routes.draw do
namespace :api do not
namespace :v1 do you
resources :cats, except: [:new, :edit]
resources :hobbies, except: [:new, :edit]
end
およびコントローラー構造:
├── app
├── controllers
├── api
└── v1
├── cats_controller.rb
└── hobbies_controller.rb
├── application_controller.rb
Cat Hobbies ルーターの定義がないことに注意してください。 これは、このデータを使用するユーザーは、関連する猫と趣味、および関連する趣味と猫を表示する必要がありますが、猫の趣味は表示する必要がないためです。
- ステップ4: シリアライザー と JSON レンダリン
顧客が猫に関する記録を要求する場合、関連する趣味の記録も含めたいと考えています。
実際、そのデータをサイドローディングしたいと考えています。
これは、顧客が猫の記録を要求したときに、特定の趣味または関連する趣味の記録全体を含めることを意味します。
2.5 猫のシリアライザ
次に、猫のプロパティとそれに関連する趣味をシリアル化するために、猫のシリアライザーを定義します。
class CatSerializer < ActiveModel::Serializer
attributes :id, :name, :breed, :weight, :temperament
has_many :hobbies
end
これにより、Rail は cat にレコードを提供するときに、関係するデータを説明する関係のキーを含めるように指示します。 したがって、次のように Cats#index を定義するとします。
module Api
module V1
class CatsController < ApplicationController
def index
render json: Cat.all
各猫の関連する趣味のデータを説明するキーの関係が存在することがわかります。 しかし、まだデータをサイドローディングしていません。 ここには実際の趣味の記録はありません。データをサイドローディングするには、コントローラーに追加する必要があります。
render json: Cat.all, include: ['hobbies']
これで、猫のリクエストに関連する実際の趣味の記録を含むトップレベルのキーができました。
2.6 最適化: N+1
ただし、このデータは、各猫の好みのリクエストを1つずつデータベースに送信するため、現時点では読み込みが少し遅いです。 次の2つのデータベース リクエストを行っています。
Cat Load (0.4ms) SELECT "cats".* FROM "cats" INNER JOIN "cat_hobbies" ON "cats"."id" = "cat_hobbies"."cat_id" WHERE "cat_hobbies"."hobby_id" = $1 [["hobby_id", 1]]
これをきれいにして、猫に関連するすべての設定について、データベースに1回だけクエリを実行します。
コントローラーのレンダリングを変更します。
render json: Cat.includes(:hobbies), include: ['hobbies']
これにより、データベース内のクエリが次のように変更されます。
2.7 ホビーシリアライザ
Hobby レコードで提供されるデータには、関連する猫の説明データを指すキー関係が含まれていることに気付いたかもしれません。
それは、私のホビー シリアライズをセットアップしているからです。
class HobbySerializer < ActiveModel::Serializer
attributes :id, :name
has_many :cats
end
または、ホビー コントローラーで以下を使用して、ホビーのリクエストに応じて、Cat レコード フォレストが含まれる ことを確認できます。
3. まとめ
多くのテスト バージョンを使用した長い開発期間を経て、数百人の開発者と数千のコミットを備えた Rails 5.0 は、これまでで最も安定した完全な Rails バージョンの 1 つになりました。
Rails 5.0 のリリースは、Rails コミュニティが依然として非常に強力に維持および発展していることを証明しています。
オフショア開発をご検討されている方々はぜひ一度ご相談ください。
※弊社の連絡先は以下の通り
アカウントマネージャー: クアン(日本語・英語対応可)
電話番号: (+84)2462 900 388
お電話でのご相談/お申し込み等、お気軽にご連絡くださいませ。
- オフショア開発
- エンジニア人材派遣
- ラボ開発
- ソフトウェアテスト
電話番号: (+84)2462 900 388
メール: contact@hachinet.com
お電話でのご相談/お申し込み等、お気軽にご連絡くださいませ。
無料見積もりはこちらから
Tags
ご質問がある場合、またはハチネットに協力する場合
こちらに情報を残してください。折り返しご連絡いたします。
関連記事
情報技術分野における人工知能の応用
デジタル化の時代において、人工知能(AI)は、さまざまなプロセスを改善し、自動化することで、多くの分野、特に情報技術(IT)分野において飛躍的な効果をもたらしています。単なる技術ツールを超えて、AIはエンジニア、企業、個人ユーザーが情報を利用・活用する方法に大きな変革をもたらしています。 この記事では、IT分野におけるAIの応用について、各側面を詳しく分析し、AIがもたらす変化と、その影響について掘り下げて解説します。
2024年の中国IT市場とベトナムIT企業のチャンス
2024年、中国の情報技術(IT)産業は急速な発展を続けており、先進的な技術分野が台頭し、多くの企業に新たなトレンドやチャンスを提供しています。同時に、ベトナムも世界的に注目を集める技術拠点として浮上し、中国のIT企業との協力機会がますます広がっています。この記事では、中国の2024年のIT市場の状況を分析し、ベトナムのIT人材やベトナムのITエンジニアが活躍できる協力の可能性を探ります。
日本企業のEORサービス利用の理由
グローバル化が進むビジネス環境の中で、多くの日本企業が国際的な人材リソースを最適化し、規模を拡大するための解決策を模索しています。その中で、効果的な戦略の一つがEmployer of Record (EOR) サービスの利用です。このサービスは、新しい市場で迅速にプレゼンスを確立するだけでなく、他国での人材管理に関する法的リスクやコストを最小限に抑えることができます。それでは、なぜ日本企業がEORサービスの利用を検討すべきなのでしょうか?このソリューションがもたらすメリットについて詳しく見ていきましょう。
企業がEORサービスを利用すべきタイミング
近年、グローバル化が進展する中で、多くの企業が海外市場への進出を目指しています。特に、ベトナムなどの新興市場では、質の高い人材を安価に確保できることから、多くの企業が注目しています。しかし、異国での事業展開には様々な課題が伴います。特に、現地の法令遵守や人事管理の複雑さは、企業にとって大きな負担となります。このような状況下で、雇用代行 (EOR) サービスは、企業にとって非常に有効な解決策となります。本記事では、企業がEORサービスを利用すべき具体的なタイミングとその利点について探っていきます。
IT業界でおすすめの人材派遣ベトナム会社4選【2023年最新版】
こんにちは、皆さん!IT業界で最新の人材派遣会社をお探しの方におすすめのベトナム会社をご紹介します。ベトナムは、多くの優秀なIT人材が育成されており、コストパフォーマンスが高く、日本企業にとっても魅力的な市場です。そこで、2023年最新版のおすすめの人材派遣ベトナム会社4選をご紹介します。
ITサービスにおけるボディショッピングとは?
ボディショッピングとは、情報技術サービスにおける人材派遣の一形態であり、企業が必要とする技術者を外部の派遣会社から借り入れることを指します。この記事では、ボディショッピングについて詳しく説明し、そのメリットとデメリットについても取り上げます。