6月枠も残りわずか】当社人気の転職保証コース
プログラミング学習から転職成功まで導く、当社人気のDMM WEBCAMP(旧WEBCAMP PRO)。
5月受入枠は満員となっております。6月枠に向け、お早めの申込みをオススメします。
プログラミング未経験でもエンジニア転職を絶対成功させたい
スキルを身に着けて人生を自ら切り開きたい

上記にあてはまる方は、ぜひご検討ください!

はじめに

例えば、天気予報や為替情報を公開しているサイトに対して、グラフや表などの画面ではなく、データそのものを返してきて欲しいときがあります。

例えば、自分のRailsアプリケーションにあった形で天気予報を表示したり、為替のグラフを表示したりする場合などがあるでしょう。

すべてのサイトではありませんが、そういったサイトは少なくありません。

また、モバイルのソーシャルゲームなど、データの保持や主な処理をサーバーで行い、モバイル機器では表示だけ行うことが一般的です。そんなとき、サーバーはモバイルアプリケーションからのリクエストにHTMLを返すことなくデータを返しているのです。

今回は、そんなAPIについて、Railsでの作り方を含めて、詳しく解説いたします。

なお、WebAPIは、Railsのバージョンが5以降でなければ使用できません。コマンドプロンプトで以下のコマンドを実行し、表示されるRailsのバージョンが5未満の場合は、5以上のバージョンをインストールしてください。なお、Railsのインストールについては、「【Rails入門説明書】 チュートリアルについて解説」を参照してください。

rails -v

APIとは?

APIとは、Application Program Interfaceの略で、アプリケーションがその機能の一部を外部から操作することを許すための仕組みです。

例えば、計算機のアプリケーションと、文字編集するエディタがあったとして、計算機にAPIがあれば、エディタがそのAPIで計算機の四則演算の機能だけを呼び出し、さもエディタが計算しているかのような処理を行うことができるわけです。

同じように、Webサイトに搭載されたAPIがWebAPIであり、WebAPIを使えば、ネットワークを介して、サーバーに処理をさせることができるようになります。

そのため、非力なモバイル機器が利用することで、その表現力を大きく向上させることができますし、容量不足を補うこともできるのです。

もちろん、通常のRailsアプリケーションと同じく、処理を行って結果を返すという流れに違いはありません。しかし、返すものがHTMLやCSSなどではなく、主にJSONなどのデータです。

そのため、Railsアプリケーションですが、MVCのうちのV(View)は必要ありませんし、Viewで使用するヘルパーも不要です。

それだけではなく、通常のRailsアプリケーションがサポートしているブラウザに関連する機能(CookiesやCSSなど)も利用する必要がありません。

コツコツ独学×スクールで実践。未経験からエンジニアに転職!【WebCamp卒業生インタビュー】

RailsでAPIを作ってみよう

では、実際にWebAPIを作ってみましょう。

通常のRailsアプリケーションと同様に、まずは環境を作成して、その後モデルやコントローラを生成することになります。

環境を作る

APIを作る場合、通常のRailsの環境生成時に、「--api」オプション設定をしなければいけません。そうすることで、前項の最後に説明したViewやヘルパー、ブラウザ関連の機能を省いた環境が出来上がるのです。

例えば、以下のようにしてWebAPI「api_test」を生成します。

rails new api_test --api

もちろん、ここまでではまだWebAPIの外側ができただけですので、なにもできません。

念のため、サーバーを実行して、ブラウザから「localhost:3000」へアクセスしてみましょう。

cd api_test
rails s

ブラウザには、いつもの画面が表示されていれば、環境作成完了です。

コントローラとルーティング

モデルとコントローラを生成することで、データベースとのアクセスと、リクエストに対するアクションを定義できます。

この「リクエストに対するアクション」が、APIを使用する人にとって重要な入り口になるわけです。つまり、アクションを呼び出すリクエストに対して、HTMLではなくJSONのデータを返すことで、APIの動作が成立するわけです。

CTRL+Cでサーバーを停止し、モデルとコントローラを作成しましょう。実際には、「rails generate」を使ってそれぞれを個別に生成しても良いですが、ここでは、scaffoldを使って一気に生成しましょう。

rails g controller users

このコマンドで、コントローラファイル「app/controllers/users_controller.rb」が生成されますので、この中にアクションとなるメソッドを追加していきます。
(app/controllers/users_controller.rb)

class UsersController < ApplicationController
end

例えば、「{"username"=>"Taro", "talk"=>"hello"}」というデータを返すアクション「taro」を実装してみましょう。
(app/controllers/users_controller.rb)

class UsersController < ApplicationController
  def taro
    info = {"username"=>"Taro", "talk"=>"hello"}
  
    render :json => info
  end
end

もちろん、このままではアクションへのアクセス方法が分かりませんので、ルーティングの設定をします。(ルーティングについては、「【Rails入門説明書】routesについて解説」を参照してください)
(config/routes.rb)

Rails.application.routes.draw do
  get '/users/taro', to: 'users#taro'
end

改めて、サーバーを起動して、今度はルーティング設定した「localhost:3000/users/taro」へアクセスしてみましょう。

JSON形式のデータが表示されているのが、分かります。

今回は、コントローラだけ生成して、直接コントローラのアクション内でデータを作っていますが、モデルも生成してデータベースからデータを取得したり、取得したデータを加工したりするなどが一般的です。

しかし、今回作ったものが、APIの基本的な動きですので、しっかりと憶えておきましょう。

注意点

WebAPIを作成する上で、いくつか注意していただきたい点がありますので、説明しておきます。

十分なテストをすること

WebAPIは一般的に、広く公開され、その動作を元にして、他のサイトやアプリケーションが作られます。

つまり、公開前にしっかりとテストをして不具合修正しておかなければ、何かあったときに影響範囲が非常に広いのです。

そのため、WebAPIのテストは、通常のRailsアプリケーション以上に慎重に行わなければいけません。

テストするための環境が必要

WebAPIのテストをするためには、WebAPIを利用するアプリケーションが必要になってきます。そのため、テストをするための準備に相応の時間が必要です。

また、手作りのテストプログラムの場合は、問題が発覚したときに、それがWebAPIに問題が有野か、テストプログラムに問題があるのかの切り分けがとても難しくなります。

そのため、テストについてはgemで提供されているテストツールを利用することをおすすめします。

“未経験”でもたった1ヶ月で営業からエンジニアとして転職!『WebCamp』受講者インタビュー

APIは、何を返すべきか

前項で、基本的なWebAPIを作成しました。

しかし、実際のWebAPIは第三者が使う機能ですので、より精密に設計し、ルーティング設定やアクセス方法(エンドポイントと呼びます)も、分かりやすいものにしておかなければいけません。

その基本となる考え方がCRUD(Create(生成)、Read(読み取り)、Update(更新)、Delete(削除))です。

CRUDはソフトウェアが持つユーザーインターフェイスとして持つべき機能で、これらを持つことで、ユーザーが一般的な使い方ができるものと言えます。

つまり、WebAPIについても、これらの機能を持つことで、使いやすいユーザーインターフェイスを持っていると言えるわけです。

なんのためにAPIが使われるのか

CRUDを揃えたWebAPIを作るといっても、そもそも、そのWebAPIがなんのために使われるのかを考慮しておかなければ、無駄なインターフェイスを作ることになります。

例えば、既存の天候データや過去の取引情報を提供するだけのアプリケーションであれば、生成や削除、更新などのエンドポイントは不要で、読み取りだけで良いでしょう。

逆に、ブラウザ上のユーザーインターフェイスを持たず、すべてコマンドで処理するようなサービスであれば、WebAPIでCRUDすべてをきちんと定義しておかなければ、使いづらいアプリケーションになるでしょう。(前述の情報提供用アプリケーションでも、管理者用には、すべて必要な場合が少なくありません)

つまり、WebAPIの特性によっては、生成や削除が不要な場合などもあるわけですが、そもそも「どういう風に使うのか」を考慮しなければ、最適なエンドポイントを定義することはできないのです。

ユーザーが求めているものを考える

ユーザーが「どう使うか」まで押さえたとして、最適なAPIを作るのにはまだ足りません。

ユーザーが「どこまでの情報を求めているか」という点も必要なのです。

過去の取引情報を提供するアプリケーションで、CRUDがきちんと実装されていても、取引の金額のみしか取得できなければ、利用価値はあまりありません。

取引日時や商品の情報、買い手と売り手なども必要としている場合がほとんどでしょう。しかし、商品の製造年月日や買い手や売り手の年齢などまで必要としているかどうかは、状況によります。

このように、WebAPIを利用するユーザーに提供する情報そのものについても、きちんと検討しておく必要があるのです。

そして、APIが返すデータはできる限り同じ形(フォーマット)で返すべきでしょう。そうすることで、WebAPIそのものの可読性やメンテナンス性が向上するだけでなく、WebAPIを利用するアプリケーションのメンテナンス性も上げることになるのです。

未経験から上京し、エンジニアとしてチームラボグループに転職!【WebCampPro卒業生インタビュー】

まとめ

今回は、RailsによるWebAPIについて、説明しました。

WebAPIは、通常のRailsアプリケーションに比べると、使い手がどう使うのかを想像して、考え得る使い方すべてで正常に動作する(問題なく終了することも含む)ようにイレギュラーパターンを作り込んでおかなければいけません。

また、画面がないだけに、自分でテストするにも工夫する必要があります。

しかし、WebAPIはきちんと公開すると、とても利便性が高い機能です。それは、ユーザーインターフェイスがない分、デザインなどプログラマーの中には得意ではない人もいる部分を気にする必要がないということです。そのため、そのサービスの実際の処理(ビジネスロジックと呼びます)に集中することができるということになるわけです。

プログラマーにはとても魅力的なWebAPIに、ぜひ、チャレンジしてみてください。

・APIとは、アプリケーションがその機能の一部を外部から操作することを許すための仕組み
・WebAPIとは、ネットワークなどを通じて、サーバーに処理をさせる
・エンドポイントはコントローラへ実装する
・ルーティング設定を忘れないよう

DMM WEWBCAMPについて

DMM WEBCAMPは3ヶ月間で未経験から即戦力エンジニアを育成する転職保障付きのプログラミングスクールです。1ヶ月でプログラミング・Webデザインを学ぶ通い放題の「ビジネス教養コース」も展開しています。

DMM WEBCAMPを運営する株式会社インフラトップ では、「学びと仕事を通して人生を最高の物語にする」という理念で会社を経営しています。

キャリアアップを目指す方は、この機会に私達と一緒にプログラミングを学んでみませんか?

6月枠も残りわずか】当社人気の転職保証コース
プログラミング学習から転職成功まで導く、当社人気のDMM WEBCAMP(旧WEBCAMP PRO)。
5月受入枠は満員となっております。6月枠に向け、お早めの申込みをオススメします。
プログラミング未経験でもエンジニア転職を絶対成功させたい
スキルを身に着けて人生を自ら切り開きたい

上記にあてはまる方は、ぜひご検討ください!


▼未経験から1ヶ月でWEBデザイン・プログラミングを学びたい方はこちら!

 

【インタビュー】1ヶ月でRubyをゼロから学び、Webエンジニアとして転職!

ブラジルから帰国し技術をつけようとRubyエンジニアを目指してWebCampでRubyを学び、見事Webエンジニアとして転職を果たした田中さんにお話を伺いました。

Rubyの学習がしたい。基礎をしっかりと理解したい

転職のサポートがほしい

と考えている方はぜひお読み下さい。

【WebCamp卒業生インタビュー】1ヶ月でRubyをゼロから学び、Webエンジニアとして転職!

おすすめの記事