Как я могу получить полный URI (т.е. не "потоковый") для поля узла Drupal в одном запросе к модулю Services?

Предисловие

Я создаю сайт Drupal, который служит конечной точкой для обслуживания контента для мобильного приложения, написанного на Flex. CMS отвечает за хранение нескольких элементов, имеющих, помимо прочих полей, поле для изображения, представляющего узел (например, обложку фильма или небольшой продуктовый снимок). Я использую модуль "Службы" и службу REST для передачи этого контента в мобильное приложение в формате JSON.

проблема

Я заметил, что Drupal (или, возможно, сама Служба) ограничивает объем данных, возвращаемых с каждым запросом, по-видимому, основываясь на степени детализации запроса. Например, запрос индекса узла возвращает только те поля, которые более или менее одинаковы для каждого узла: nid, title, status и т. Д. В то время как запрос для одного узла дополнительно возвращает настраиваемые поля, включая поле моего изображения.

Моя проблема заключается в том, что значение URI для поля изображения "потоковое" (или, как я видел, оно упоминалось при исследовании этой проблемы), так что оно просто отображается как 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: [ ]
    }

1 ответ

Так как не получил ответа, я сделал это сам.
Новый модуль, полная информация о файле URL, заполнит информацию, которую вы ищете.
Более подробная информация в моем блоге - " Информация о файле Drupal, заполнение информации URL для Сервисов".

Другие вопросы по тегам