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

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

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

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

Q&A

解決済

2回答

2083閲覧

API等の公式マニュアルの正しい読み方が知りたい

tesopgmh

総合スコア146

API

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

0グッド

2クリップ

投稿2021/06/21 14:37

「PAY.jp」というサービスがあり以下のようなマニュアルがあります

https://pay.jp/docs/api/?php

例えば上記マニュアルを見て
「PHPのSDKを使い顧客リストのJSONデータを取得したい」と思い

■1.APIドキュメント「#顧客リストを取得」を参照すると
https://pay.jp/docs/api/#%E9%A1%A7%E5%AE%A2%E3%83%AA%E3%82%B9%E3%83%88%E3%82%92%E5%8F%96%E5%BE%97

■2.以下のPHPソースで
\Payjp\Payjp::setApiKey("sk_test_XXXXXXXXXXXXXXXX");
\Payjp\Customer::all(array("limit" => 3, "offset" => 10));

■3.以下のようなJSON値が「レスポンス」される と説明されていますが
{
"count": 1,
"data": [
{
"cards": {
"count": 0,

実際に2のソースを実行してもJSONが「レスポンス」(標準出力)されることはありません 標準出力なんてどこにも書いていないので標準出力しないのだろう、ではレスポンスとは一体なんなのか 標準出力されないので変数に代入してみました ■4.返り値を変数に代入してみる \Payjp\Payjp::setApiKey("sk_test_XXXXXXXXXXXXXXXX"); $hoge = \Payjp\Customer::all(array("limit" => 3, "offset" => 10)); print_r($hoge); するとオブジェクト形式が返却され、プロテクトがかかっており ドキュメント通りのJSONデータにアクセスすることができません 私が期待する結果はJSON形式の値が返ってくることです Payjp\Collection Object ( [_opts:protected] => Payjp\Util\RequestOptions Object ( [headers] => Array ~~~~~~~~~~~省略~~~~~~~~~~~ オブジェクトをJSONに変換する関数などがあるのかと ドキュメントをはじめから目を通してみたのですが どこにもそのような言及はありませんでした エラーメソッドにそれっぽい関数はありましたので 以下を試してみたのですが当然エラーとなりました $hoge = \Payjp\Customer::all(array("limit" => 3, "offset" => 10))::getJsonBody(); $hoge = \Payjp\Customer::all(array("limit" => 3, "offset" => 10))->getJsonBody(); 「レスポンス」という言葉の定義をマニュアル内でキーワード検索しましたが 答えは見つからない ドキュメントに書かれている通りのJSONを返り値として得たい こういう場合に「googleを使って」「先人プログラマの具体的なソースが書いてある備忘録のブログを見る」という 問題解決方法が常態化してしまっているのですが これで解決できてしまうのでその手法に甘えていたのですが ここらへんで「ちゃんとマニュアルを見る」「公式ドキュメントで理解する」方法を身に着けたいと思っています このドキュメント通り \Payjp\Payjp::setApiKey("sk_test_XXXXXXXXXXXXXXXX"); \Payjp\Customer::all(array("limit" => 3, "offset" => 10)); でJSONの値は返ってきません、でもマニュアルには「レスポンス」すると書かれています 私は、ドキュメントのどこを見ればこれを理解することが出来るのでしょうか コツなのか分からないですが「公式ドキュメントを見て理解できる」方にどうやったら 「先人プログラマの具体的なソースが書いてある備忘録のブログを見る」ではなく 正しいマニュアルの読み方が身に着くのか教えていただきたいです お忙しいところ恐縮ですがご確認よろしくお願い致します

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

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

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

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

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

guest

回答2

0

ベストアンサー

自動生成のAPIリファレンスはわかりにくい。あまり役に立たない。
ドキュメントとGitHubを見るほうが多い。
ググるのは一番無駄。

APIからのレスポンスがjsonだとしても各言語のSDKでどう扱ってるかは別。
https://github.com/payjp/payjp-php/blob/8902fb85bbbaeb6b3eefbad39755a2117e302280/lib/Customer.php#L29

php

1 /** 2 * @param array|null $params 3 * @param array|string|null $opts 4 * 5 * @return array An array of Customers. 6 */ 7 public static function all($params = null, $opts = null) 8 { 9 return self::_all($params, $opts); 10 }

@return arrayだけど実際に動かすとPayjp\CollectionならGitHubのほうが間違ってる。
https://github.com/payjp/payjp-php/blob/master/lib/Collection.php
Collection→ApiResource→PayjpObjectと辿っていくと
PayjpObjectはarrayのように使えるはずなので
$hoge['data']$hoge->dataができそう。
jsonにするなら。

$json = $hoge->__toJSON();

PHP5.6以上のせいかこのSDK自体が現代のPHPでは辛い。
結局はドキュメントもSDKも整備されてないので使いにくいのは当然。

投稿2021/06/21 15:51

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

tesopgmh

2021/06/21 16:51

すごい、すごいです! WEBで具体的なソース書いてる人たちってkawaxさんみたいな人たちなんですよね 本当にすごいと思います $json = $hoge->__toJSON(); で出来ました!! なんでこれを導き出せるんですか!? 「function all」でソース全体をgrep検索して、くらいは私でも理解できますが そこからextendされてるソースをたどるとなんで正解があると分かったんでしょうか??経験則ですか?? kawax様が答えを導き出してるときの頭の中のロジックめちゃくちゃ見たいです 最終地点に「public function __toJSON()」があるので $json = $hoge->__toJSON(); は分かりましたが PayjpObjectはarrayのように使えるはずなので $hoge['data']や$hoge->dataができそう。 これがどのように導き出されたのかもいまだに分かってないです ありがとうございます!!
guest

0

PAY.JPのAPIを利用するには、ユーザー登録を行い、APIページからAPIキーを取得してください。

と書いてありますよ
正しいキーを記述していないからダメなんでしょう

投稿2021/06/21 14:49

編集2021/06/21 14:49
y_waiwai

総合スコア88042

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

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

tesopgmh

2021/06/21 14:59

ありがとうございます APIページからAPIキーを取得してセットしております 期待するJSON形式ではないですがオブジェクト形式のデータがちゃんと返却されているので 基本的な設定は成功しているのだと思われます マニュアル通りのJSONの値が返ってこないです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問