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

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

新規登録して質問してみよう
ただいま回答率
85.48%
cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

API

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

Q&A

解決済

1回答

1191閲覧

SwaggerでPOST送信しているのにPOST取得ではなくGET取得できてしまう問題

earnest_gay

総合スコア615

cURL

cURLはHTTP, FTPやTelnetなど複数のプロトコルを用いてデータを転送するライブラリとコマンドラインツールを提供します。

REST

REST(Representational State Transfer)はwebアプリケーションの構築スタイルの一種です。HTTP GET/POSTによってリクエストを送信し、レスポンスはXMLで返されます。SOAPのようなRPCの構築と比べるとサーバからクライアントを分離することが出来る為、人気です。

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

API

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

0グッド

0クリップ

投稿2017/12/28 06:09

fuelphpでswagger-uiを使いたくて動作確認しているのですが、postで送信しているのに、Input::post()ではなくInput::get()で取得できてしまいます。

swagger.jsonに出力するためのアノテーションで確実に@SWG\Postとしているのですが、念のためInput::method()で確認してもpost送信であることに間違いはないようです。

/** * @SWG\Post( * path="/Dev/personal/fuel_model_of_fuelphp_1.8/public/counting/index", * summary="テスト投稿", * description="リクエストされた数を返す", * tags={"hoge"}, * produces={"application/json","application/xml"}, * @SWG\Parameter( * name="number", * description="作品 ID", * type="string", * in="query", * ), * @SWG\Response( * response=200, * description="成功", * @SWG\Schema( * @SWG\Property( * property="is_success", * type="boolean", * description="登録成功確認フラグ", * ) * ) * ) * ) */ public function post_index() { $number = Input::post('number', null); var_dump(Input::method()); var_dump(Input::get()); var_dump(Input::post()); return $this->response([ 'is_success' => false, ]); }

Swagger-UIでの確認↓
Response body

can't parse JSON. Raw result: string(4) "POST" array(1) { ["number"]=> string(2) "23" } array(0) { } {"is_success":false}

ターミナルからcuelを実行してもでも同じ結果です。

post送信しているにも関わらずGET取得できてしまうのには違和感があります。
どうしたらPOST取得できるようになりますでしょうか。

あと本質問からずれますが、can't parse JSON. Raw result:というのも気になっていて、、、
produces={"application/json","application/xml"}を定義しているのでswagger-uiの方でxmlで実行してみるとcan't parse JSON. Raw resultは表示されないのですが、jsonで取得したいのですが、どうしたらcan't parse JSON. Raw resultを解決できるでしょうか。

can't parse JSON. Raw resultで3時間ぐらい調べていますが一向に解決方法がわかりません。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Restfulなアクセスをしたい場合は、Controller_Restを継承しなければいけません。Controller_Hybridであれば両方対応可能です。また、下記のようにInput::json()を使用するとうまく取得できると思います。

php

1class Controller_コントローラー名 extend Controller_Hybrid 2{ 3 public function post_index() 4 { 5 //出力フォーマットを指定したい場合 6 //$this->format = 'json'; 7 8 //Restful JSON 9 $number = Input::json('number', null); 10 11 var_dump(Input::json()); 12 var_dump(Input::method()); 13 var_dump(Input::get()); 14 var_dump(Input::post()); 15 16 return $this->response([ 17 'is_success' => false, 18 ]); 19 } 20}

FuelPHPのInputクラスは下記のようになっています。

php

1namespace Fuel\Core; 2 3class Input 4{ 5 //... 6 7 public static function json($index = null, $default = null) 8 { 9 static::$json === null and static::hydrate_raw_input('json'); 10 return (func_num_args() === 0) ? static::$json : \Arr::get(static::$json, $index, $default); 11 } 12 13 protected static function hydrate_raw_input($type) 14 { 15 static::$php_input === null and static::$php_input = file_get_contents('php://input'); 16 static::$$type = \Security::clean(\Format::forge(static::$php_input, $type)->to_array()); 17 } 18 19 //... 20}

投稿2018/01/10 13:03

Tomak

総合スコア1652

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

earnest_gay

2018/01/10 13:50

回答ありがとうございます。 Controller_Restを継承したabstractコントローラーがありまして、質問ソースはabstractコントローラーを継承したコントローラになります。 どうも、Input::postが動作しないのが気になってしまって、、、
Tomak

2018/01/10 16:00

Input::post() は PHPの $_POST を使用していて、フォームから来たデータを処理するためのもので、生のJSONは処理できないと思います。 Input::post() で処理したい場合は、Swaggerに下記のように設定すると「application/x-www-form-urlencoded」でエンコードさるので受け取ることができるはずです。 ---- ... consumes = {"application/x-www-form-urlencoded"}, produces = {"application/json","application/xml"}, @SWG\Parameter( name ="number", description = "作品 ID", type = "string", in = "formData", ), ...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問