我正在构建一个Drupal站点,该站点兼作用Flex编写的移动应用程序的内容服务端点。 CMS负责存储许多项目,这些项目除了其他字段外还包含表示节点的图像的字段(如电影封面或小型产品镜头)。我正在使用服务模块和REST服务将此内容作为JSON提供给移动应用程序。
我注意到Drupal(或者也许是Services本身)限制了每个请求返回的数据量,似乎基于请求的粒度。例如,节点索引请求仅返回每个节点或多或少相同的字段:nid,title,status等。同时请求单个节点另外还返回自定义字段,包括我的图像字段。
我的问题是图片字段的URI值是“streamwrapped”(或者我在调查此问题时看到过它),因此它只是列为public://images/node_image.jpg
。为了获得完整的URI,我必须请求文件。这意味着对于移动应用程序中的索引页面,我必须发出1 + (n * 2)
个请求才能获取有关给定节点的完整数据,以及n
个请求以获取每个节点显示的图像。对于给定的节点页面,最多n
为8,这意味着每页节点可以向服务器发出最多25个请求。
这是常见/接受的还是更容易/更快/更少苛刻的方式来获取更少请求中的数据?
旁注:我注意到的一件事是文件请求以图像数据base64编码返回。我当然可以使用它来显示图像,但我更愿意从服务器请求二进制图像。
/end-point/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...
]
/end-point/node/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...
}
/end-point/file/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: [ ]
}
答案 0 :(得分:0)
由于没有回答,我自己做了。
新模块Full URL file information将填充您要查找的信息
我的博文中有更多详细信息 - “Drupal file information, filling the URL information for Services”。