Введение
Я создаю сайт Drupal, который служит конечной точкой для обслуживания контента для мобильного приложения, написанного на Flex. CMS отвечает за хранение ряда элементов, имеющих, помимо прочих полей, поле для изображения, представляющего узел (например, обложку фильма или небольшой продуктовый снимок). Я использую модуль Службы и службу REST для передачи этого контента в мобильное приложение в формате JSON.
Проблема
Я заметил, что Drupal (или, возможно, сама Служба) ограничивает объем данных, возвращаемых с каждым запросом, по-видимому, основываясь на степени детализации запроса. Например, запрос индекс узла возвращает только те поля, которые более или менее одинаковы для каждого узла: nid, заголовок, статус и т. Д. В то время как запрос для одиночного узла дополнительно возвращает настраиваемые поля, включая поле моего изображения.
Моя проблема в том, что значение URI для поля изображения «потоковое» (или, как я видел, оно упоминалось при исследовании этой проблемы), так что оно просто указано как public://images/node_image.jpg
. Чтобы получить полный URI, мне нужно сделать запрос на файл . Это означает, что для индексной страницы в мобильном приложении мне нужно сделать 1 + (n * 2)
запросов только для получения полных данных о данном узле, плюс n
запросов для получения изображений для каждого дисплея узла. Максимум n
будет 8 для данной страницы узлов, так что это означает, что я могу делать до 25 запросов к серверу на страницу узлов.
Является ли это общим / принятым или есть более простой / быстрый / менее сложный способ получить доступ к этим данным в меньшем количестве запросов?
Примечание: Одна вещь, которую я заметил, это то, что запрос файла возвращается с кодировкой 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 * +1035 *
{
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: [ ]
}