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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

2543閲覧

REST API で取得するデータが多い時どうしますか?

matsuo_basho

総合スコア88

REST

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2021/11/25 06:38

いつもお世話になっております。

表題についてお伺いさせてください。
現在wordpress、Next環境下でSSGのブログサイトを作成しております。

REST API経由で記事を取得し、そのデータをもとに各記事の詳細ページを作成したいのですが、
記事数が500件近くあり、一度に全ての記事を取得しようとすると60MBほどします。

このような大きな容量の場合、皆様はどのように対応されますか?
ご意見を頂戴できればと思います。

それではどうぞ宜しくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

REST API経由で記事を取得し、そのデータをもとに各記事の詳細ページを作成したいのですが

記事の詳細ページなら、その記事の詳細のみを取得すれば良い気がします。

記事数が500件近くあり、一度に全ての記事を取得しようとすると60MBほどします。

一覧の場合は、記事の全ての内容を取得するなく、一覧で表示する項目すればいいです。

60MBほどします。

記事のどのfieldが大きいかによって、対応方法違うので、どのようなfieldのサイズが大きいですか?

投稿2021/11/25 07:23

heroyct

総合スコア434

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

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

matsuo_basho

2021/11/25 08:06 編集

早速のコメントありがとうございます! >記事の詳細ページなら、その記事の詳細のみを取得すれば良い気がします。 Nextだと静的ページを生成する際に getStaticProps() 実行時に 全ての記事のIDを返す必要があるんですよね。 そのIDを元に全ての詳細ページの静的ページを作成するようで。。 >記事のどのfieldが大きいかによって、対応方法違うので、どのようなfieldのサイズが大きいですか? 以下の形式のデータが返ってくるのですが、 [ {オブジェクト}, {オブジェクト}, {オブジェクト}, …. ] さらにオブジェクトの中身は以下みたいな感じです。 { "id": 3410, "slug": "aaa", "date": "2021-11-25 01:56:53", "date_modified": "2021-11-25 01:57:56", "title": "テスト5", "content": "あああ", "excerpt": "", "status": "publish", "categories": [], "tags": [] } 目視ですが、本文の content あたりがかなり容量を大きくしているのではないかと思います。
heroyct

2021/11/25 09:26

Rest APIは別サービスですか?提供してるoptionはどんなものありますか? 1. 特定範囲のレコードを取得するoptionがあるはず(offset limitなど)、数回分けてrequestする手があります。 2. 特定のfieldのみ取得を指定できるなら、IDのみの取得する
matsuo_basho

2021/11/25 10:04

APIサーバーとしては wordpress を利用しており、 プラグイン WP REST API のエンドポイントを介して記事情報を取得しています。 option というのがどの部分に対してかちょっと分からなかったのですが、、、 例えば基本的なエンドポイントは以下のURLに記載されている通りになります。 https://developer.wordpress.org/rest-api/reference/ ただ、上記のプラグインではデフォルトで10件のみ取得、 また wordpress 側ではデフォルトで上限100件を取得できるようになっているのですが、 都度リクエストをするのが面倒だったので、 自前でエンドポイントを作成し、全ての記事を一回で取得できるようにしています。 (なので、数回に分けてリクエストをすることは可能です。) >2. 特定のfieldのみ取得を指定できるなら、IDのみの取得する すみません、実装を進めていて気が付いたのですが、 どうやらIDに限らず本文や関連するカテゴリー情報なども必要なようでした、、。 なので、2. についてはダメそうです、、。 >1. 特定範囲のレコードを取得するoptionがあるはず(offset limitなど)、数回分けてrequestする手があります。 一応デフォルトの設定を利用する場合(デフォルトでは10件のみ取得)は、 数回に分けてリクエストをかけることができるのですが、 ・一度で全てのデータを取得 ・数回に分けて取得 のどちらかになる場合、どちらの方がベストなのでしょうか?
heroyct

2021/11/26 03:34

なるほど、paginationはこの辺ですね。 https://developer.wordpress.org/rest-api/using-the-rest-api/pagination/ 500件なので、100件が上限のため、最小で5回リクエストが必要そうです。 100件ずつ取得して、かかる時間は許容範囲なら、それでいい気がします。 取得時間を短縮したいなら、以下の方法があると思います。 1. 非同期でリクエストを投げる、例えば、1~10件、11~20件を非同期でリクエストする 1. 記事の更新頻度にもよりますが、数時間一回のみ取得して、DB、redisなどへ保存する まあ、まずボトルネックどこなのかを明確した方が良い気がします。
matsuo_basho

2021/12/06 13:50

返信が遅くなり失礼しました、、。 NextのSSGで開発側の待ち時間がかかるだけなので とりあえずは一気に500件でも大丈夫そうです。 その他にも色々とご提案をいただきありがとうございました。 他のご提案もCSR時に試してみたいと思います!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問