質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

解決済

APITesterでのcreateアクションが上手くできない(rails apiモードを使用)

senseIY
senseIY

総合スコア205

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

1回答

-1評価

0クリップ

154閲覧

投稿2022/06/08 10:13

編集2022/06/11 19:43

解決したいこと

API Testerを使って動作確認をしているのですが、createアクションなどのパラメータを送る際にエラーになってしまうので解決したいです。

発生しているエラー

| Started POST "/api/v1/users" for 172.20.0.1 at 2022-06-08 18:44:37 +0900 api_1 | Error occurred while parsing request parameters. api_1 | Contents: api_1 | api_1 | api_1 | { api_1 | "name": 'John', api_1 | "email": '123@example.com', api_1 | "password": 'foobar', api_1 | "password_confirmation": 'foobar' api_1 | } api_1 | api_1 | api_1 | Processing by Api::V1::UsersController#create as */* api_1 | Completed 400 Bad Request in 5ms (Allocations: 112) api_1 | api_1 | api_1 | api_1 | ActionDispatch::Http::Parameters::ParseError (Error occurred while parsing request parameters): api_1 | api_1 | app/controllers/api/v1/users_controller.rb:38:in `user_params' api_1 | app/controllers/api/v1/users_controller.rb:11:in `create' { "status": 400, "error": "Bad Request", "exception": "#<ActionDispatch::Http::Parameters::ParseError: Error occurred while parsing request parameters>", "traces":{ "Application Trace":[ { "exception_object_id": 21680, "id": 8, "trace": "app/controllers/api/v1/users_controller.rb:38:in `user_params'" }, { "exception_object_id": 21680, "id": 9, "trace": "app/controllers/api/v1/users_controller.rb:11:in `create'" } ], "Full Trace":[ {"exception_object_id": 21680, "id": 0, "trace": "actionpack (7.0.3) lib/action_dispatch/http/parameters.rb:96:in `rescue in parse_formatted_parameters'"…}, {"exception_object_id": 21680, "id": 1, "trace": "actionpack (7.0.3) lib/action_dispatch/http/parameters.rb:92:in `parse_formatted_parameters'"…}, {"exception_object_id": 21680, "id": 2, "trace": "actionpack (7.0.3) lib/action_dispatch/http/request.rb:390:in `block in POST'"…}, {"exception_object_id": 21680, "id": 3, "trace": "rack (2.2.3) lib/rack/request.rb:69:in `fetch'"}, {"exception_object_id": 21680, "id": 4, "trace": "rack (2.2.3) lib/rack/request.rb:69:in `fetch_header'"}, {"exception_object_id": 21680, "id": 5, "trace": "actionpack (7.0.3) lib/action_dispatch/http/request.rb:389:in `POST'"…}, {"exception_object_id": 21680, "id": 6, "trace": "actionpack (7.0.3) lib/action_dispatch/http/parameters.rb:55:in `parameters'"…}, {"exception_object_id": 21680, "id": 7, "trace": "actionpack (7.0.3) lib/action_controller/metal/strong_parameters.rb:1227:in `params'"…}, {"exception_object_id": 21680, "id": 8, "trace": "app/controllers/api/v1/users_controller.rb:38:in `user_params'"}, {"exception_object_id": 21680, "id": 9, "trace": "app/controllers/api/v1/users_controller.rb:11:in `create'"}, … {"exception_object_id": 21680, "id": 56, "trace": "actionpack (7.0.3) lib/action_dispatch/middleware/static.rb:23:in `call'"…}, {"exception_object_id": 21680, "id": 57, "trace": "rack (2.2.3) lib/rack/sendfile.rb:110:in `call'"}, {"exception_object_id": 21680, "id": 58, "trace": "actionpack (7.0.3) lib/action_dispatch/middleware/host_authorization.rb:137:in `call'"…}, {"exception_object_id": 21680, "id": 59, "trace": "rack-cors (1.1.1) lib/rack/cors.rb:100:in `call'"}, {"exception_object_id": 21680, "id": 60, "trace": "railties (7.0.3) lib/rails/engine.rb:530:in `call'"}, {"exception_object_id": 21680, "id": 61, "trace": "puma (5.6.4) lib/puma/configuration.rb:252:in `call'"}, {"exception_object_id": 21680, "id": 62, "trace": "puma (5.6.4) lib/puma/request.rb:77:in `block in handle_request'"…}, {"exception_object_id": 21680, "id": 63, "trace": "puma (5.6.4) lib/puma/thread_pool.rb:340:in `with_force_shutdown'"…}, {"exception_object_id": 21680, "id": 64, "trace": "puma (5.6.4) lib/puma/request.rb:76:in `handle_request'"}, {"exception_object_id": 21680, "id": 65, "trace": "puma (5.6.4) lib/puma/server.rb:441:in `process_client'"}, {"exception_object_id": 21680, "id": 66, "trace": "puma (5.6.4) lib/puma/thread_pool.rb:147:in `block in spawn_thread'"…} ] }

users_controller.rb

module Api module V1 class UsersController < ApplicationController def show render json: User.find(params[:id]) end def create user = User.new(user_params) if user.save render json: user else render json: user.errors, status: 422 end end def update user = User.find(params[:id]) if user.update render json: user else render json: user.errors, status: 422 end end def destroy if User.destroy(params[:id]) head :no_content else render json: {error: "Failed to destroy" }, status: 422 end end private def user_params params.require(:user).permit(:name, :email, :password, :password_confirmation) end end end end

API Testerから送ったリクエスト

POSTリクエストを http://localhost:3001/api/v1/usersへ { "name": "John" , "email": "fuga@example.com", "password": "foobar" , "password_confirmation": "foobar" }

自分の考察

以下のサイトを参考にさせていただきました。
https://qiita.com/k-penguin-sato/items/adba7a1a1ecc3582a9c9
・まず、jsonの送り方が悪いのではないかと考え、

{ user:{ name: "John" , email: "fugaa@example.com", password: "foobar" , password_confirmation: "foobar"} } や { name: "John" , email: "fugaa@example.com", password: "foobar" , password_confirmation: "foobar"}

このような書き方も試してみましたがダメでした。
・エラーになるのはcreateのようなパラメータを送るときです。showアクションは上手く行きました。
・showアクションが上手く行ったことと、エラーの番号が通信に失敗したとき用に設定していた422ではなく400のBad Requestだったことを踏まえると、送るjsonの形式に間違いがあるのではないかと考えています。
何かしらアドバイスがあればよろしくお願いいたします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

winterboum

2022/06/11 00:00

user:{ を付けたときに だめでした というのは、エラーの内容も同じですか?
senseIY

2022/06/11 01:02

コメントして頂きありがとうございます。 はい。エラー内容はいずれも同じでした。 一応エラーを記載させていただきます。 ``` api_1 | Error occurred while parsing request parameters. api_1 | Contents: api_1 | api_1 | { api_1 | "name": 'John', api_1 | "email": '123@example.com', api_1 | "password": 'foobar', api_1 | "password_confirmation": 'foobar' api_1 | } api_1 | api_1 | api_1 | Processing by Api::V1::UsersController#create as */* api_1 | Completed 400 Bad Request in 15ms (ActiveRecord: 0.0ms | Allocations: 2702) api_1 | api_1 | api_1 | api_1 | ActionDispatch::Http::Parameters::ParseError (Error occurred while parsing request parameters): api_1 | api_1 | app/controllers/api/v1/users_controller.rb:38:in `user_params' api_1 | app/controllers/api/v1/users_controller.rb:11:in `create' api_1 | Started POST "/api/v1/users" for 172.20.0.1 at 2022-06-11 09:57:18 +0900 api_1 | Error occurred while parsing request parameters. api_1 | Contents: api_1 | api_1 | { api_1 | "user": { api_1 | "name": 'John', api_1 | "email": '123@example.com', api_1 | "password": 'foobar', api_1 | "password_confirmation": 'foobar' api_1 | } api_1 | } api_1 | api_1 | api_1 | Processing by Api::V1::UsersController#create as */* api_1 | Completed 400 Bad Request in 2ms (ActiveRecord: 0.0ms | Allocations: 128) api_1 | api_1 | api_1 | api_1 | ActionDispatch::Http::Parameters::ParseError (Error occurred while parsing request parameters): api_1 | api_1 | app/controllers/api/v1/users_controller.rb:38:in `user_params' api_1 | app/controllers/api/v1/users_controller.rb:11:in `create' api_1 | Started POST "/api/v1/users" for 172.20.0.1 at 2022-06-11 09:58:05 +0900 api_1 | Error occurred while parsing request parameters. api_1 | Contents: api_1 | api_1 | { api_1 | user: { api_1 | "name": 'John', api_1 | "email": '123@example.com', api_1 | "password": 'foobar', api_1 | "password_confirmation": 'foobar' api_1 | } api_1 | } api_1 | api_1 | api_1 | Processing by Api::V1::UsersController#create as */* api_1 | Completed 400 Bad Request in 1ms (ActiveRecord: 0.0ms | Allocations: 113) api_1 | api_1 | api_1 | api_1 | ActionDispatch::Http::Parameters::ParseError (Error occurred while parsing request parameters): api_1 | api_1 | app/controllers/api/v1/users_controller.rb:38:in `user_params' api_1 | app/controllers/api/v1/users_controller.rb:11:in `create' api_1 | Started POST "/api/v1/users" for 172.20.0.1 at 2022-06-11 09:58:39 +0900 api_1 | Error occurred while parsing request parameters. api_1 | Contents: api_1 | api_1 | { api_1 | user: { api_1 | name: 'John', api_1 | email: '123@example.com', api_1 | password: 'foobar', api_1 | password_confirmation: 'foobar' api_1 | } api_1 | } api_1 | api_1 | api_1 | Processing by Api::V1::UsersController#create as */* api_1 | Completed 400 Bad Request in 3ms (ActiveRecord: 0.0ms | Allocations: 111) api_1 | api_1 | api_1 | api_1 | ActionDispatch::Http::Parameters::ParseError (Error occurred while parsing request parameters): api_1 | api_1 | app/controllers/api/v1/users_controller.rb:38:in `user_params' api_1 | app/controllers/api/v1/users_controller.rb:11:in `create ```
winterboum

2022/06/11 04:15

"email": "fuga@example.com", でなく email: "fugaa#{n}@example.com", になっていて #{n} が入ってるのがきになります。 ないとどうなります?
senseIY

2022/06/11 06:32

大変申し訳ございません。seed.rbからコピーしてそのまま貼り付けてしまったので#{n}の部分を消すのを忘れたまま投稿してしまいました。実際にはemail: "fugaa#{n}@example.com",のようなデータではなく、"email": "fuga@example.com",のように#{n}をつけていないデータを送っています。例としては質問への追記・修正依頼のところに挙げたエラー内容のように { "name": 'John', "email": '123@example.com', "password": 'foobar', "password_confirmation": 'foobar' } や { "user": { "name": 'John', "email": '123@example.com', "password": 'foobar', "password_confirmation": 'foobar' } } のような形式のデータを送っています。質問の方も誤字修正させていただきました。
senseIY

2022/06/11 10:41

解決致しました。以下の通りにパラメータを送ったところ正常に作動しました。 ``` {"user":{ "name": "John", "email": "123@example.com", "password": "foobar","password_confirmation": "foobar"} } ``` どうやら、ダブルクォーテーションとシングルクォーテーションを混合して仕様している場合にエラーが起きる可能性があるようです。貴重なお時間を割いていただき誠にありがとうございました。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。