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

Ruby on RailsでJSONパーサーAPIを作ってみる。

Last updated at Posted at 2023-04-03

はじめに

naritomoと申します。

本職はインフラエンジニアを行っています。
これまでアプリ領域の技術習得のため、各種言語の開発環境Dockerの構築を行ってきましたが、Railsでのアプリ第一号を作ってみましたので、公開したいと思います。

いろいろアドバイスいただけると嬉しいです。

開発概要

以下の仕様とします。

  • API稼働フレームワークはRuby on Railsを使用する。
  • API入力は、以下のものを入力する。
    • URLにクエリでJSONキーを指定する。(?key=key1)
    • POSTボディーにJSONデータを入れる。
  • API出力は以下のものとする。
    • クエリで指定したJSONキーに対応した値をプレーンテキストで出力する。

事前準備

以下の記事を参考にRuby on Rails開発環境を構築してること。
Railsサイトを参照できること。
プロジェクトフォルダ(src)に移動する。

API構築方法

APIソース作成

コントローラファイルを作成する。

vi app/controllers/api/v1/data_controller.rb

ファイル内容

module Api
  module V1
    class DataController < ApplicationController
      skip_before_action :verify_authenticity_token

      def extract
        json_data = JSON.parse(request.body.read)
        query_key = params[:key]

        if json_data.key?(query_key)
          render plain: json_data[query_key]
        else
          render json: { error: "Key '#{query_key}' not found in JSON data" }, status: :bad_request
        end
      end
    end
  end
end

ルートファイルを開く。

vi config/routes.rb

編集内容

以下の内容に編集する。

Rails.application.routes.draw do
  namespace :api do
    namespace :v1 do
      post 'extract', to: 'data#extract'
    end
  end
end

動作確認

新しいターミナルを立ち上げ、以下のコマンドを入力する。

curl -X POST -H "Content-Type: application/json" -d "{"name": "John", "age": "30"}" "http://localhost:3000/api/v1/extract?key=age"

30という値が返ってくること。

おわりに

Railsでのアプリ開発第一歩として、JSONパーサーAPIを構築してみました。

この作成にはchatgptも利用して構築しています。

この記事がRailsでのAPIを作ってみたい方の助けになればと思います。

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