1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Rails API】HTTPメソッドで困ったことを振り返ってみる【Postman】

Last updated at Posted at 2024-09-29

こんにちは。あがさんです!!

今回はAPIについて投稿です。
Railsで作ったプロジェクトをAPIとしても利用できるようにする設定や注意点をお伝えできればと思います。
宜しくお願います。

APIとは

アプリケーションやサービス同士が互いにデータをやり取りし、機能を利用するためのインターフェースやプロトコルのことです。簡単に言うと、便利機能を外部向けに提供するための仕組みです。

RailsプロジェクトをAPI化する

自分で作っいたRubyonRailsプロジェクトをAPI向けに改修しました。
API化することでRailsプロジェクトの外部からデータのやり取りが可能になります。
今回はPostmanを使ってRailsAPIと連携するための方法を説明します。

ポイントは以下の4つです。

  • gem 'rack-cors'をbundleインストール
  • routes.rb
  • api/v1/articles_controller.rb
  • cors.rb

gem 'rack-cors'と CORS

rack-corsは、RailsアプリケーションでCORS(Cross-Origin Resource Sharing)を設定するためのGemです。設定することで外部のドメインからのHTTPリクエストが許可され、他のウェブアプリケーションやクライアントからRailsのAPIにアクセスできるようになります。

# Gemfile
gem 'rack-cors'
# bash
bundle install

cors.rb

bundle installの後にcors.rbを作成して下記のように記述します。

cors.rb
# config/initializers/cors.rb
Rails.application.config.middleware.insert_before 0, Rack::Cors do
  allow do
    origins '*'
    resource '*', headers: :any, methods: [:get, :post, :put, :patch, :delete, :options, :head]
  end
end

origins '*'という箇所はすべての外部ドメインからのアクセスを許可しているという意味になります。特定のドメインからだけリクエストを受けたい場合は変更が必要です。

その他改修したコード

routes.rb

API用のルーティングを既存のルーティングとは別に追記しました。
従来のRailsプロジェクトでhttp://localhost:3000/articles/にアクセスすれば、indexアクションのページでデータを取得できましたが、APIからindexアクションのデータを取得するためにはhttp://localhost:3000/api/v1/articles/というURLからアクセスする必要があります。

routes.rb
Rails.application.routes.draw do
  namespace :api do
    namespace :v1 do
      resources :articles, only: [:index, :show, :create, :update, :destroy]
    end
  end
end

api/v1/articles_controller.rb

既存の app/controllers/articles_controller.rbとは別にAPIの用のコントローラーの作成が必要です。
ポイントは.erbファイルに表示させるのではく、外部ドメインにそれぞれのアクションごとにJSONの情報を返すためにrender json: @articlesという記述をします。

articles_controller.rb
# app/controllers/api/v1/articles_controller.rb
module Api
  module V1
    class ArticlesController < ApplicationController
      # GET /articles
      def index
        @articles = Article.all
        render json: @articles
      end

      # GET /articles/:id
      def show
        @article = Article.find(params[:id])
        render json: @article
      end

      # POST /articles
      def create
        @article = Article.new(article_params)
        if @article.save
          render json: @article, status: :created
        else
          render json: @article.errors, status: :unprocessable_entity
        end
      end

      # PUT /articles/:id
      def update
        @article = Article.find(params[:id])
        if @article.update(article_params)
          render json: @article
        else
          render json: @article.errors, status: :unprocessable_entity
        end
      end

      # DELETE /articles/:id
      def destroy
        @article = Article.find(params[:id])
        @article.destroy
        head :no_content
      end

      private

      def article_params
        params.require(:article).permit(:title, :subtitle, :body, :tag, :user_id)
      end
    end
  end
end

Postmanを使ってHTTPリクエスト

Rails側のサーバーを起動して、外部からデータのやり取りが可能かテストしました。
今回はPostmanを使って確認します。

今回利用するHTTPメソッドとURL

メソッド URL 備考
GET http://localhost:3000/api/v1/articles/ 一覧画面や詳細画面でデータ取得
POST http://localhost:3000/api/v1/articles/ データを新規作成
PUT http://localhost:3000/api/v1/articles/.:id データを更新
DELET http://localhost:3000/api/v1/articles/2 データを削除

【実施した操作】

  1. POSTメソッドを使い、"id": 19のデータを新規作成。
    POST

  2. GETメソッドを使い、"id": 19含めたすべてのデータを取得。
    GET

  3. PUTメソッドを使い、"id": 19のデータを更新。
    POST

  4. DELETEメソッドを使い、"id": 18のデータを削除。
    DELETE

  5. 改めてGETメソッドを使いすべてのデータを取得。"id": 18のデータが削除され、"id": 19のデータが更新されていることを確認。
    GET

無事にPostmanと連携ができており、APIとして機能していることが確認できました。

まとめ

いかがでしたでしょうか。
実はAPIとかHTTPメソッドとかプログラミング始めたての時に少し触れてみたんですけど、処理の流れやデータのやり取りがわかりづらくて苦手だったんですよね、、、。

今回は取り組む際は自分で作ったアプリを改修するところから徐々に移行できたので、
ルーティングやデータの扱いなど把握しながら進められました。

CORS設定やControllerの記述で少し沼ってしまいましたが最終的に動作できるようになって安心しました。
Postmanで201 Createdとか返事がもらえるとちょっぴり嬉しいですね!

また次回も頑張って投稿します。
最後まで見ていただきありがとうございました!!

~Qiitaの歴史がまた1ページ~

関連リンク:

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?