2
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?

api/controllerとweb/controller

Last updated at Posted at 2024-12-31

はじめに

今回はコードリーディングをしていた時に、引っかかったapijsonについて調べたことをまとめていこうと思います。web/controlerapi/controllerは何が違うのか、json形式のデータはどのように使われているのか、確認する良い機会になりました。

APIについて復習

API(Application Programming Interface)は、クライアントとサーバー、またはサーバーとデータベースをつなぐ役割を持っています。特にWebアプリケーションでは、以下のような2つの主な役割を担います。

  1. クライアントとサーバー間の通信
    クライアント(フロントエンド)にデータを提供する。
  2. サーバーとデータベースの橋渡し
    データベースから取得した情報をクライアントに渡す。

API ControllerとWeb Controllerの違い

Railsでは、コントローラーはリクエストに応じた処理を行い、クライアントにデータやページを返す役割を持っています。このコントローラーには主に2つの種類が存在します。

Web Controller

Web Controllerは主にHTMLやCSS、JavaScriptといったユーザーインターフェース(UI)を生成するためのコントローラーです。例えば、ブラウザで直接アクセスするページ(ビュー)を作成する場合に使用します。これに対応するビューはHTMLやERBファイルなどです。

class UsersController < ApplicationController
  def index
    @users = User.all 
  end
end

この場合、app/views/users/index.html.erb というビューが呼び出され、ユーザー一覧がHTML形式で表示されます。

API Controller

一方、API ControllerはUIではなくデータそのものを返すために設計されています。これにより、クライアント(たとえばフロントエンドのJavaScriptやモバイルアプリ)はデータを取得して独自に表示や操作を行えます。ビューとしてはHTMLではなく、JSONやXML形式が用いられます。

class Api::UsersController < ApplicationController
  def index
    @users = User.all
    render json: @users
  end
end

この例では、@usersに含まれる全ユーザー情報をJSON形式で返します。render json: @usersにより、サーバーサイドでデータを動的に生成し、クライアントに提供します。


Web ControllerとAPI Controllerの違いまとめ

項目 API Controller Web Controller
目的 データを返す HTMLなどのUIを返す
返却形式 JSON, XML HTML, CSS, JavaScript
Api::UsersController UsersController
RailsのView JSONやXMLを生成 HTMLやCSSを生成

動的・静的なページ

ここまでで、Web ControllerとAPI Controllerがそれぞれの役割に応じてどのような形式でレスポンスを返すのかを確認しました。これを踏まえて、次に「動的なページ」と「静的なページ」の違いを考えてみましょう。

  • 動的ページ
    サーバーサイドで処理を行い、リクエストに応じてデータを動的に生成するページです。たとえば、API Controllerで認証済みユーザーに応じたデータを返したり、条件に基づいてリソースをフィルタリングしたりする場合が該当します。

  • 静的ページ
    あらかじめ生成された固定データを返すページです。たとえば、特定の定義情報やバージョン情報を提供するAPIや、更新頻度が低いWebページが該当します。

Railsでは、動的なデータ処理を得意とするAPI Controllerと、固定的なHTMLを返すWeb Controllerを使い分けることで、柔軟な設計が可能です。

MVCアーキテクチャにおけるWebとAPIの共通点

RailsはWebアプリケーション開発で使用されるMVC(Model-View-Controller)アーキテクチャを、API開発にも適用できます。それぞれの役割は以下の通りです。

Model

データやビジネスロジックを管理し、データベースとのやり取りを行います。WebとAPIの両方で役割は基本的に同じです。

View

  • Web: HTML、CSS、JavaScriptを使い、ブラウザに表示する画面を生成します。
  • API: JSONやXMLなどの形式で、クライアントに返すデータを生成します。

JSONレスポンスを効率よく構築する方法

Railsでは、JSON形式のレスポンスを効率的に構築するためにJbuilderを利用できます。Jbuilderを使ったコード例は以下のようになります。

# app/views/users/index.json.jbuilder
json.array! @users do |user|
  json.id user.id
  json.name user.name
  json.email user.email
end

この例では、@usersに含まれるユーザー情報をJSON形式で整形し、レスポンスとして返します。

json.array!
array!jbulderが配列を生成するためのメソッドです。このコードでは、@usersに含まれるデータを基にJSON形式の配列を作成します。

json.id
JSONオブジェクトのキーidを生成します。

json.id user.id
userオブジェクトのid属性を取得して、その値をidキーに割り充てる。

API開発における認証と認可

セキュリティはAPI開発において非常に重要です。Railsは、以下のような一般的な認証方法をサポートしています。

  1. Token-based Authentication
    各リクエストにトークンを含めることで、ユーザーを認証します。
  2. OAuth
    外部サービスを利用した認証やアクセストークンの発行に使用されます。

まとめ

Railsは、API開発に必要な機能を多く備えたフレームワークです。APIとWebの違いを理解し、Railsの強力なツール(例えばJbuilderや認証機能)を活用することで、効率的かつセキュアなAPIを構築できます。

2
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
2
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?