属性:当前的REST架构工具是否仅限于树结构?

时间:2010-02-26 14:25:59

标签: web-services rest attributes

历史上操作系统目录结构是树:

  • C:
    • 视窗
      • System32下
    • 程序文件
      • 公共档案
      • Internet Explorer

REST架构模仿同样的事情:

但是,看看当前的结构,我需要进行搜索:

  • 所有不是来自的图片 芬兰?
  • 2005年拍摄的所有照片?
  • 时间轴上的所有图片?

使用每个树层次结构组合执行REST接口效率不高。您需要更有效的信息管理;你需要一个属性系统而不是树形结构。 (哦,为什么操作系统不是基于属性?)

StackOverflow和Google似乎使用属性和语法“+” - 标记如下:

今天的框架如WCF和ASP.NET MVC对RESTful树结构有很好的支持。但是对属性结构有支持吗?你不会把属性结构称为REST吗?

我想创建一个属性-WebService并将其与Silverlight-client中的LINQ一起使用...哪种方法最好? : - )

2 个答案:

答案 0 :(得分:5)

为了创建有效的REST接口,您需要确定对客户端应用程序有意义的资源。如果你看一下你的用例:

所有非芬兰的照片? 所有2005年拍摄的照片? 时间轴上的所有图片?

您需要回答的问题是,这需要三个资源还是一个资源。我假设您想要的不仅仅是这三个查询,因此最灵活的解决方案是定义一个“图片集合”的通用资源。

/Thomas/pictures

从这里开始,您希望能够使用查询参数来限制此资源的内容。

/Thomas/pictures?country=not-finland
/Thomas/pictures?year=2005

对于第三个项目,为该项目创建单独的资源可能是有意义的。

/Thomas/PictureTimeline

在其他情况下,创建其他资源(例如

)可能有意义
/Thomas/FavouritePictures

重要的是确定要将模型建模为资源的关键概念,然后为这些资源分配URL。尝试通过URL空间进行REST设计会让你头撞墙。

答案 1 :(得分:3)