序文
Flex で記述されたモバイル アプリのコンテンツ提供エンドポイントとしても機能する Drupal サイトを構築しています。CMS は、他のフィールドの中でも、ノードを表すイメージのフィールド (映画の表紙や小さな製品のショットなど) を持つ多数のアイテムを格納する役割を果たします。サービス モジュールと REST サービスを使用して、このコンテンツをモバイル アプリに JSON として提供しています。
問題
Drupal (またはおそらくサービス自体) が、リクエストの粒度に基づいて、各リクエストで返されるデータの量を制限していることに気付きました。たとえば、ノード インデックスリクエストは、すべてのノードで多かれ少なかれ同じフィールドのみを返します: nid、title、status など。一方、単一ノードのリクエストは、my image フィールドを含むカスタム フィールドを追加で返します。
私の問題は、画像フィールドの URI 値が「streamwrapped」であるため (または、この問題の調査で参照されているのを見たことがあります)、単純に としてリストされていることですpublic://images/node_image.jpg
。完全な URI を取得するには、ファイルをリクエストする必要があります。つまり、モバイル アプリのインデックス ページでは1 + (n * 2)
、特定のノードに関する完全なデータを取得するためだけにリクエストを作成する必要があり、加えn
て、各ノード表示の画像を取得するためのリクエストを作成する必要があります。ノードの特定のページに対して最大n
で 8 つになるため、ノードのページごとにサーバーに対して最大 25 の要求を行うことができます。
これは一般的/受け入れられていますか?それとも、より少ないリクエストでこのデータにアクセスするためのより簡単/高速/負担の少ない方法はありますか?
補足:私が気づいたことの 1 つは、ファイル リクエストが base64 でエンコードされた画像データベースで返されることです。確かにそれを使用して画像を表示できますが、サーバーからバイナリ画像を要求するだけの方がよいでしょう。
例
/エンドポイント/node.json
[
{
nid: "6",
vid: "6",
type: "page",
language: "und",
title: "Node 6 Title",
...snip...
uri: "http://example.com/end-point/node/6"
},
{
nid: "5",
vid: "5",
type: "game",
language: "und",
title: "Node 5 Title",
...snip...
uri: "http://example.com/end-point/node/5"
},
...snip...
]
/エンドポイント/ノード/5.json
{
vid: "5",
uid: "1",
title: "Node 5 Title",
...snip...
body: {
und: [{
value: "Lorem ipsum dolor sit amet.",
summary: "Lorem ipsum...",
format: "filtered_html",
safe_value: "<p>Lorem ipsum dolor sit amet.</p>",
safe_summary: "<p>Lorem ipsum...</p>"
}]
},
field_artwork: {
und: [{
fid: "8",
alt: "",
title: "",
width: "252",
height: "272",
uid: "1",
filename: "node_image.jpg",
uri: "public://images/node_image.jpg",
filemime: "image/jpeg",
filesize: "32653",
status: "1",
timestamp: "1329839925",
rdf_mapping: []
}]
},
...snip...
}
/エンドポイント/ファイル/8.json
{
fid: "8",
uid: "1",
filename: "node_image.jpg",
uri: "public://node_image.jpg",
filemime: "image/jpeg",
filesize: "32653",
status: "1",
timestamp: "1329839925",
rdf_mapping: [ ],
uri_full: "http://example.com/sites/default/files/images/node_image.jpg",
target_uri: "images/node_image.jpg",
file: "..snip base64-encoded image data...",
image_styles: [ ]
}