2017-08-31 21 views
0

比方说,我正在开发一个Rails后端用作API相同的资源。我有一个Book模型,其中has_manyReviews。每个这样的Reviewshas_manyPhotosbelongs_to一个User。要了解我要去的内容,请查看酒店评论网站,其中有来自酒店用户的图片。但是,在画廊旁边,您还可以找到用户的单独评论,其中包含一些照片。目前我JSON响应看看这个:JSON API设计:包括在多个地方

{ 
book: { 
    id: 1, 
    star_rating: 5 
    original_images: [] 
}, 
reviews: [ 
    { 
    id: 1, 
    title: "great book", 
    photos: [ 
    { 
    url: "http://foobar.gov", 
    caption: "hi" 
    }, 
    { 
    url: "www.hello.world", 
    caption: "hi" 
    } 
    ], 
    user: { 
    name: "Fred" 
    } 
    }, 
    { 
    id: 2, 
    ..etc 
    } 

我的困境:我的应用程序的前端,我希望能够循环通过审查,并显示审查数据+审查的照片,所以做这样的事情review.userreview.titlereview.photos在一个循环将是伟大的,并与我目前的数据结构。另一方面,当我想要展示一个画廊时,如果我在与original_images相同的结构层次上有一个阵列,它将包含所有的URL,对我来说更容易。但是,如果我这样做,当我想显示一个具体的审查的照片,我会基本上做一个巨型大小的数组中进行搜索,并挑选出属于那个特定的审查图像。

我的问题:我应该包括在多个地方的照片?无论他们现在在哪里,还可以在一个大阵中作为original_images的兄弟姐妹?

回答

0

因此,看来你正在寻找解决方面的两个问题,审查照片:

  1. 显示所有的照片,供其他特定资源(酒店,你的情况)。
  2. 只显示资源的单个评论照片。

我假设,当酒店的页面加载时,你会想要准备好所有的评论照片。当你想显示一个单独的评论的照片时,我假设用户会点击评论并进入一个新页面或某种模式会出现。

你的API正在发送你所有你需要的数据。现在,您只需要在客户端对数据进行处理以适应您的需求。因此,当页面加载时,您将遍历响应并创建两个数组:reviewsallReviewImages。然后,您将通过从allReviewImages阵列获取该酒店的所有评论图像,然后通过reviews阵列显示所有评论及其相关图像。 <div data-imagelink="{reviews.photos[id]}"></div>

我不知道你的客户进行编码,但你:

要经历的reviews阵列时,在一个单独的页面或模式显示个别审查的形象,你可以创建必要的逻辑/链接从上面的例子中得到想法。

你得到你从你的API响应所需要的数据,您需要做的仅仅在客户端的一些争论,你应该能够做你所需要的!