5
Most read
6
Most read
10
Most read
トビウオ、2021/06/04
Drupalにおける
JSON:APIの注意点
公式ドキュメントを読まないと掛かる落とし穴
JSON:APIとは?
• JSON形式で求めるデータ+メタ情報を表現できるフォーマット
• 以前発表したスライドでも解説した
• 今回はDrupalに搭載されているJSON:APIについて解説
ハマりやすい注意点
1. X件要求してX件返ってくるとは限らない
2. 一度に取得できる件数に制限がある
3. 総件数を知る方法がない
1. 返却される件数の問題
• 「端数、余りについての話だよね?」
• それとは別の理由でも起こりうる
• Drupalの権限(アクセス制限)に由来する問題
1. 返却される件数の問題
id 記事名 種類
1 AAA 無料記事
2 BBB 無料記事
3 CCC プレミアム記事
4 DDD プレミアム記事
5 EEE 無料記事
6 FFF 無料記事
7 GGG 無料記事
• 「無料会員」ロールと「プレミア
ム会員」ロールがあり、後者のみ
プレミアム記事を参照する権限を
持っていたとする
• 無料会員アカウントがJSON:APIで
先頭5件を取得するよう要請すると
、id=3とid=4は取得できないので、
3件しか返ってこない
2. 取得できる件数に制限がある問題
• 1. から、エンティティのデータを取得する際は、ア
クセス制限を考慮する必要がある
• ゆえに、一度に大量に取得すると強い負荷が掛かる
• そのため、一度には最大50件までしか返さないよう
に設定されている
3. 総件数を取得できない問題
• これも1. 関連だが、「あるアカウントが取得できる
件数」を調べるだけでコストが高い
• そのため、総件数は分からないものとしてプログラ
ムを書く必要がある
データ取得のベストプラクティス
• 公式ドキュメントにサンプルコー
ドがある
• 「指定したリンクを頼りに、最大
X件のデータを取得する」関数に
ついてのもの
• 最大X件のデータと、「次のペー
ジ」に向けたリンクを返す
ベストプラクティスの詳解
• 本来、JSON:APIにはページング機能が備わっている
• page[offset]でオフセットを指定
• page[limit]で受信する最大件数を指定
• ただ、前述の事情により、page[limit]でX件指定しても、X件が返ってくると
は限らない
• そのため、次のX件を取得するには、nextを活用することになる
ベストプラクティスの詳解
• nextとは、JSON:APIでの戻り値におけるlinks.next部分のこと
• 上の青枠部分に、「next」「prev」「first」が含まれていることがある
• 「next」「prev」「first」は必須ではなく、どれか含まれないこともある
• 「nextがない」=「次のページが存在しない(最後のページである)」
ベストプラクティスの詳解
つまり先ほどのサンプルを要約すると、次の3点となる。
1. データを取得し、バッファーにためておく
2. バッファーが必要数以上ならそれを返して終わり
3. まだ足りない場合は、nextから次のページの内容を見る
バッファーに十分貯まるか、nextがなくなるまで繰り返す
ベストプラクティスの注意点
• 公式ドキュメントより引用:
"next page" links in your HTML do not need to be correlated
to API pages! In fact, it's an indication that you might be doing it
"wrong" if they are.
• JSON:APIの戻り値における「next」と、Webページ上で表示するべき「next
」の内容は意味が異なっており、一対一対応させるようなコードを書くべき
ではないと書かれている。サンプルコードでもその辺りの対処はあった
参考資料
• Pagination | JSON_API module | Drupal Wiki guide on drupal.org
• https://www.drupal.org/docs/core-modules-and-themes/core-
modules/jsonapi-module/pagination

More Related Content

PDF
毎日が越境だ!
PPTX
JSON:APIについてざっくり入門
PDF
オブジェクト指向プログラミングのためのモデリング入門
PDF
Keycloakの最近のトピック
PDF
良い?悪い?コードコメントの書き方
PDF
プログラムの処方箋~健康なコードと病んだコード
PDF
Rdra2.0 redmine
PDF
世界最強のソフトウェアアーキテクト
毎日が越境だ!
JSON:APIについてざっくり入門
オブジェクト指向プログラミングのためのモデリング入門
Keycloakの最近のトピック
良い?悪い?コードコメントの書き方
プログラムの処方箋~健康なコードと病んだコード
Rdra2.0 redmine
世界最強のソフトウェアアーキテクト

What's hot (20)

PPTX
Mongo dbを知ろう
PDF
MongoDBの脆弱性診断 - smarttechgeeks
PDF
使用 Passkeys 打造無密碼驗證服務
PDF
あなたはPO?PM?PdM?PjM?
PDF
今更聞けない!?Microsoft Graph で始める Office 365 データ活用と事例の紹介
PDF
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
PDF
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
PDF
社内Java8勉強会 ラムダ式とストリームAPI
PPT
自動テスト知識体系TABOKのご紹介
PDF
RESTfulとは
PDF
Laravel の paginate は一体何をやっているのか
PDF
スマートフォン向けサービスにおけるサーバサイド設計入門
PDF
AI時代の要件定義
PDF
RESTful Web アプリの設計レビューの話
PDF
コンセプトから理解するGitコマンド
PDF
SharePoint Online を JavaScript でイジる。
PDF
Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜
PDF
なかったらINSERTしたいし、あるならロック取りたいやん?
PPTX
C# 8.0 null許容参照型
Mongo dbを知ろう
MongoDBの脆弱性診断 - smarttechgeeks
使用 Passkeys 打造無密碼驗證服務
あなたはPO?PM?PdM?PjM?
今更聞けない!?Microsoft Graph で始める Office 365 データ活用と事例の紹介
劇的改善 Ci4時間から5分へ〜私がやった10のこと〜
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
社内Java8勉強会 ラムダ式とストリームAPI
自動テスト知識体系TABOKのご紹介
RESTfulとは
Laravel の paginate は一体何をやっているのか
スマートフォン向けサービスにおけるサーバサイド設計入門
AI時代の要件定義
RESTful Web アプリの設計レビューの話
コンセプトから理解するGitコマンド
SharePoint Online を JavaScript でイジる。
Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜
なかったらINSERTしたいし、あるならロック取りたいやん?
C# 8.0 null許容参照型
Ad

More from iPride Co., Ltd. (20)

PPTX
Vibe Codingを触って感じた現実について.pptx .
PPTX
Devcontainerのススメ(1)-Devcontainerとはどういう技術?-
PPTX
Vibe Codingを始めよう 〜Cursorを例に、ノーコードでのプログラミング体験〜
PPTX
色について.pptx .
PPTX
勉強会_ターミナルコマンド入力迅速化_20250620. pptx. .
PPTX
やってみた!OpenAI Function Calling 入門 .
PPTX
ECAモジュールの基礎調査.pptx 2025/05/30 の勉強会で発表されたものです。
PDF
Drupal10 Theme Starterkit入門.pdf .
PDF
サイクリングはいいぞ .
PDF
DDEVでらくらくDrupalローカル環境構築。2025/2/28の勉強会で発表されたものです。
PDF
DeepSeekの紹介( 2025/2/21の勉強会で発表されたものになります)
PPTX
Azure で RDB を作成してみた (2024/12/20 の勉強会で発表)
PPTX
vi / vim の基本コマンドについて(2024/12/20 の勉強会で発表)
PPTX
WebAuthnについてのざっくり説明[2024/10/25]の勉強会で発表されたものです。
PPTX
AWSの勉強、AWS S3編。2024/10/11の勉強会で発表されたものです。
PPTX
AWSの勉強リージョン編  2024/09/27の勉強会で発表されたものです。
PPTX
AWSサポートに学ぶ、エラーなどの報告をする際のコツ(2024/09/13 勉強会)
PPTX
最近のDrupalバージョンアップで起きた問題まとめ(2024/09/13 勉強会)
PPTX
AWSとIPv6 2時間目  2024/09/06の勉強会で発表されたものです。
PPTX
AWSとIPv6       2024/08/30の勉強会で発表されたものです。
Vibe Codingを触って感じた現実について.pptx .
Devcontainerのススメ(1)-Devcontainerとはどういう技術?-
Vibe Codingを始めよう 〜Cursorを例に、ノーコードでのプログラミング体験〜
色について.pptx .
勉強会_ターミナルコマンド入力迅速化_20250620. pptx. .
やってみた!OpenAI Function Calling 入門 .
ECAモジュールの基礎調査.pptx 2025/05/30 の勉強会で発表されたものです。
Drupal10 Theme Starterkit入門.pdf .
サイクリングはいいぞ .
DDEVでらくらくDrupalローカル環境構築。2025/2/28の勉強会で発表されたものです。
DeepSeekの紹介( 2025/2/21の勉強会で発表されたものになります)
Azure で RDB を作成してみた (2024/12/20 の勉強会で発表)
vi / vim の基本コマンドについて(2024/12/20 の勉強会で発表)
WebAuthnについてのざっくり説明[2024/10/25]の勉強会で発表されたものです。
AWSの勉強、AWS S3編。2024/10/11の勉強会で発表されたものです。
AWSの勉強リージョン編  2024/09/27の勉強会で発表されたものです。
AWSサポートに学ぶ、エラーなどの報告をする際のコツ(2024/09/13 勉強会)
最近のDrupalバージョンアップで起きた問題まとめ(2024/09/13 勉強会)
AWSとIPv6 2時間目  2024/09/06の勉強会で発表されたものです。
AWSとIPv6       2024/08/30の勉強会で発表されたものです。
Ad

Recently uploaded (7)

PPTX
生成AIとモデルベース開発:実はとても相性が良いことを説明します。まあそうだろうなと思われる方はご覧ください。
PDF
翔泳社 「C++ ゼロからはじめるプログラミング」対応 C++学習教材(三谷純)
PDF
20250826_Devinで切り拓く沖縄ITの未来_AI駆動開発勉強会 沖縄支部 第2回
PDF
Working as an OSS Developer at Ruby Association Activity Report 2025
PDF
ココロ分解帳|感情をやさしく分解し自分と他者を理解するためのモバイルノートアプリ
PDF
Geminiの出力崩壊 本レポートは、Googleの大規模言語モデル「Gemini 2.5」が、特定の画像と短文入力に対して、誤った地名を推定し、最終的に...
生成AIとモデルベース開発:実はとても相性が良いことを説明します。まあそうだろうなと思われる方はご覧ください。
翔泳社 「C++ ゼロからはじめるプログラミング」対応 C++学習教材(三谷純)
20250826_Devinで切り拓く沖縄ITの未来_AI駆動開発勉強会 沖縄支部 第2回
Working as an OSS Developer at Ruby Association Activity Report 2025
ココロ分解帳|感情をやさしく分解し自分と他者を理解するためのモバイルノートアプリ
Geminiの出力崩壊 本レポートは、Googleの大規模言語モデル「Gemini 2.5」が、特定の画像と短文入力に対して、誤った地名を推定し、最終的に...

DrupalにおけるJSON:APIの注意点