如何在对服务模块的单个请求中获取 Drupal 节点字段的完整 URI(即不是"streamwrapped")?



前言

我正在构建一个Drupal网站,它可以兼作用Flex编写的移动应用程序的内容服务端点。CMS负责存储许多项目,这些项目除其他字段外,还有一个表示节点的图像字段(如电影封面或小产品拍摄)。我使用服务模块和REST服务将这些内容作为JSON提供给移动应用程序。

问题

我注意到Drupal(或者服务本身)限制了每个请求返回的数据量,似乎是基于请求的粒度。例如,节点索引请求只返回每个节点或多或少相同的字段:nid、title、status等。而单个节点的请求还返回自定义字段,包括我的图像字段。

我的问题是,image字段的URI值是"streamwrapped"(或者我在研究这个问题时看到过它),因此它被简单地列为public://images/node_image.jpg。为了获得完整的URI,我必须请求文件。这意味着,对于移动应用程序中的索引页面,我必须发出1 + (n * 2)请求,以获取给定节点的完整数据,再加上n请求,以获得每个节点显示的图像。对于一个给定的节点页面,n最多为8,这意味着我可以在每个节点页面上向服务器发出多达25个请求。

这是常见的/可接受的,还是有一种更简单/更快/不那么严厉的方法可以在更少的请求中访问这些数据?

附带说明:我注意到的一件事是,文件请求返回时带有图像数据base64编码。我当然可以用它来显示图像,但我更喜欢从服务器请求二进制图像。

示例

/end-point/note.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/note/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: [ ]
    }

由于没有得到答案,我自己做了
新的模块,完整的URL文件信息,将填补你正在寻找的信息
更多详细信息,请参阅我的博客文章"Drupal文件信息,填写服务的URL信息"。

相关内容

  • 没有找到相关文章

最新更新