post Image
RailsとSwiftでAPI通信を行うブログアプリを作る。 〜API編〜

はじめに

Rails × APIの簡単なサンプルでちょうど良いのがないのと、肝心なところが省略されていたりしたので、超絶優しくサンプルを解説します。

対象となるのは、RailsでAPI作ってSwiftで操作するアプリケーションを触ってみたい方です。
Rails5から標準搭載となったAPIモードが素晴らしいので、APIモードを使ってサクッとAPI作ってSwift側で受け取って流れを掴んでみたいという方向けとなっています。

環境

  • Ruby 2.4
  • Rails 5.1.4

APIモードでnewする

rails new アプリケーション名 --apiでAPIモードでアプリを作成できる
今回は取り敢えず、blog_apiという名前のapiを作成する

// apiモードで作成
$ rails new blog_api --api

// blog_apiディレクトリに移動
$ cd blog_api

scaffoldを実行

APIモードで作成したら、scaffoldで適当なCRUD機能を作る

// ブログ機能をscaffoldで作成
$ rails g scaffold Blog title:string body:text

// マイグレーションを実行
$ rails db:migrate

APIモードでscaffoldを実行すると、views以下にテンプレートは作成されず、
* app/controllers/blogs_controller.rb
* app/models/blog.rb

以上が生成される。

中身はこのような感じ

# app/controllers/blogs_controller.rb
class BlogsController < ApplicationController
  before_action :set_blog, only: [:show, :update, :destroy]

  # GET /blogs
  def index
    @blogs = Blog.all

    render json: @blogs
  end

  # GET /blogs/1
  def show
    render json: @blog
  end

  # POST /blogs
  def create
    @blog = Blog.new(blog_params)

    if @blog.save
      render json: @blog, status: :created, location: @blog
    else
      render json: @blog.errors, status: :unprocessable_entity
    end
  end

  # PATCH/PUT /blogs/1
  def update
    if @blog.update(blog_params)
      render json: @blog
    else
      render json: @blog.errors, status: :unprocessable_entity
    end
  end

  # DELETE /blogs/1
  def destroy
    @blog.destroy
  end

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_blog
      @blog = Blog.find(params[:id])
    end

    # Only allow a trusted parameter "white list" through.
    def blog_params
      params.require(:blog).permit(:title, :body)
    end
end
# app/models/blog.rb
class Blog < ApplicationRecord
end

上記のようにcontrollerはjsonで返すように自動で処理が書かれる。(素晴らしすぎる)

URIパターンを確認する

rails routesで定義されているURIパターンを確認します。

Prefix Verb URI Pattern Controller#Action 用途
blogs GET /blogs(.:format) blogs#index 全てのレコードを取得するjsonを返す
POST /blogs(.:format) blogs#create レコードを作成
blog GET /blogs/:id(.:format) blogs#show URIで渡ってきたidのレコードを返す
PATCH /blogs/:id(.:format) blogs#update URIで渡ってきたidのレコードを更新
PUT /blogs/:id(.:format) blogs#update URIで渡ってきたidのレコードを更新
DELETE /blogs/:id(.:format) blogs#destroy URIで渡ってきたidのレコードを削除

APIを操作してみる

APIの確認とか操作をコマンドラインからやってもいいのだけど、以下の二つが便利過ぎるので、以下を使いましょう。
* Postman
* JSON Viewr

上記二つの詳細な使い方は割愛します。

rails sでサーバーを起動して、http://localhost:3000/blogsを確認する。

スクリーンショット 2018-01-23 11.15.39.png

JSON Viewrを入れていれば、以上のようになるかと思う。

Postmanでレコードを作成する

Postmanを起動して、以下のようにしましょう。
HTTPメソッドをPOSTにして、URL入力欄に、http://localhost:3000/blogsといれて、下のタブから「Headers」を選択し、以下二つを入力

Key Value Description
Accept application/json
Content-Type application/json

スクリーンショット 2018-01-23 11.18.36.png

上記入力後、タブを「Body」に変更し、その下のradioボタンを「row」にし以下を入力

{
  "blog": {
    "title": "RailsとSwiftでAPI通信を行うブログアプリを作成",
    "body": "何書こうかな"
  }
}

入力し、右上のSendボタンを送るとレコードが作成される。

スクリーンショット 2018-01-23 11.29.55.png

レコードが作成出来たら、ブラウザでhttp://localhost:3000/blogsにアクセスをしてみましょう
すると以下のようにレコードが追加されているのがわかるかと思います。

スクリーンショット 2018-01-23 11.33.16.png

Postmanでレコードを更新する

レコードの更新にはHTTPメソッドのPUTを使います。
PostmanでHTTPメソッドをPUTにし、URLをhttp://localhost:3000/blogs/1とし、bodyを以下のように書き換えます。

{
    "blog": {
        "title": "RailsとSwiftでAPI通信を行うブログアプリを作る",
        "body": "API楽しい"
    }
}

スクリーンショット 2018-01-23 11.37.24.png

上記でレコードが更新されたのがわかるかと思います。
ブラウザを確認しましょう。http://localhost:3000/blogs/1

スクリーンショット 2018-01-23 11.41.53.png

Postmanでレコードを削除する

最後に削除を行いましょう。
PostmanのHTTPメソッドをDELETEに変え、URLをhttp://localhost:3000/blogs/1にしてsendを押すだけです。

スクリーンショット 2018-01-23 11.43.41.png

ブラウザにアクセスをしましょうhttps://localhost:3000/blogs

スクリーンショット 2018-01-23 11.46.15.png

先ほどのレコードはないので、当然https://localhost:3000/blogs/1にアクセスをするとエラーとなります。

以上でAPI編は終わりです。
次はSwiftでこちらのAPIを操作出来るようにしたいと思います


『 Swift 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。