2

序文

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: [ ]
    }
4

1 に答える 1

0

答えがないので、自分で作りました。
新しいモジュールFull URL file informationは、探している情報を入力します。
詳細については、私のブログ投稿「Drupal ファイル情報、サービスの URL 情報を入力」を参照してください。

于 2013-04-22T09:19:43.090 に答える