`

REST笔记

    博客分类:
  • REST
阅读更多
书上举了个例子:
引用
http://www.flickr.com/services/rest?api_key=xxx&method=flickr.photos.search&tags=penguin
尽管URI里包含“rest”字样,但它显然是一个采用HTTP信封的RPC式服务。另一方面,它的作用域信息(“具有‘penguin’标签的照片”)是放在URI里的——从这一点看,它跟REST式面向资源的服务有点像;不过它的方法信息(“搜索照片”)也被放在URI里了,而前面说过,对于REST式服务,方法信息应该放在HTTP方法里,其余部分作为作用域信息。

我想知道这个URI写成RESTful的将会是个什么样。如果一个资源只有通过几个标准HTTP方法来操作,那么对这个photos也只能进行CRUD操作,如何搜索tags为penguin的photos?
我自己认为比较RESTful的URL应该是这样:http://www.flickr.com/photos/tags/penguin
可这样一来,在rails中如何跟PhotosController的action对上?添加一个名为tags的action吗?那岂不是又像文中说的:它的方法信息也被放在URI里了?

===========翻了些帖子、书本,大概1、2小时后============
好吧,我把tags为penguin的集合当作另一个资源吧。我在rails中试了一把,发现不知道该怎么配这个路由:/photos/tags/penguin
这么写吧:
map.resources :photos, :collection => {:tags => :get}

但是它只认识/photos/tags,不认识/photos/tag/penguin
参考了一下JavaEye,JE是这么干的:/favorite?tags=xxxx
那我是不是该写成:/photos?tags=penguin?
可是/photos这个url的get动作默认调用了PhotosController的index方法,该怎么调用我的name方法呢?

============继续思考,晚饭吃完后============
还有,按照我前面的理解:把tags为penguin的集合当作另一个资源,那这个url:/photos?tags=penguin是有问题的——这个url表示的是一个photos资源,而不是tags为penguin的photos资源,因为它的uri是/photos而不是/photos/tags/penguin,一个资源是由uri而不是url确定的。

嗯,看来/photos/tags/penguin是正确的,我配了个路由如下:
map.connect ':controller/tags/:tag', :action => 'find_by_tag'


看起来还不错,挺像回事。

总结一下:ROA中所说的“资源”并不是指领域模型中的领域对象,我认为它应该是指互联网上基于http协议开放给客户端的一个接口。通俗点说就是:一个uri就确定了一个资源,你可以通过各种HTTP动词来操作这个资源。

我原来是死抠“资源”这么个词,一直以为一个“资源”一定要在route里对应一个map.resources,对每个资源的操作只能有CRUD,所以造成Controller数量暴增(想像一下,以前咱们的做法是定义一个Controller,然后在里边定义一堆action,现在——按照我这种错误的理解——action被限制了只能有7个,如果不能由某个资源的CRUD搞定的动作,应该属于另外一个资源。也就是一个资源对应了一个Controller,这样自然造成Controller数量暴增)。

在JE和Google翻资料一周左右,读完《RESTful Web Services》第1章,经过一个很小的项目实战,得出以上这些东西。如果有什么不对的地方欢迎大家指正。

补充:刚才在翻资料的时候发现一个博客里转载的一系列文章挺不错:http://mypages.iteye.com/blog/293201一共五篇
分享到:
评论
4 楼 yuan 2009-08-14  
这里的资源应该指的是互联网上开放的一个可供操作的资源,或者说接口。
想想……嗯……也就是像Open API这样的东西吧。
3 楼 yuan 2009-08-14  
我不是很确定,我觉得michael164231和我一开始一样犯了BirdGu说的错:
BirdGu 写道
我觉得很多人感觉restful“束手束脚”的原因就是把resource和model一一对应起来了。其实这是对restful的最大误解。
2 楼 michael164231 2009-07-09  
对于你文章中的问题我也比较疑惑,我提一下自己的看法。
对于URL,“/”符号表明其含义是嵌套的关系,如文件夹和子文件夹,文章和评论的关系。这些关系都是一对多或一对一。因此路由定义中map.resources可以有:has_one,:has_many,却没有habtm。
上文中的Tag和Photo显然是多对多的关系,问题就是多对多关系怎样体现在基于资源的路由当中?

我的Email:xxmikl.mexx@gmail.com,可以交流。
1 楼 qichunren 2009-05-20  
  很有研究精神

相关推荐

    MyEclipse开发REST笔记

    在IT领域,特别是Web开发中,REST(Representational State Transfer,表述性状态转移)作为一种设计模式,被广泛应用于构建高效、可伸缩的网络应用程序。本文档深入探讨了MyEclipse环境下开发RESTful服务的关键概念...

    Django restframework课件笔记详解

    本课件笔记将深入探讨DRF的核心概念、功能模块及其在实际项目中的应用。 一、DRF简介 DRF是一个用于构建Web API的高级框架,它为Django添加了额外的组件,如序列化、认证、权限控制和分页,让API开发变得更加简单。...

    Rest以及Mashup学习笔记

    ### Rest以及Mashup学习笔记 #### REST架构风格概述 REST(Representational State Transfer,表述性状态转移)是一种专门针对Web应用的开发风格,作为当今世界最成功的互联网超媒体分布式系统架构之一,它深刻地...

    Spring Security开发rest服务 笔记 饶浩|Spring Security开发rest服务 笔记 饶浩.docx

    spring security开发rest服务笔记。总共300页。持续更新中..........................................................

    REST API.md

    本文为资料收藏的.md笔记,选取比较重要的资料,收集了以下内容: 重要概念介绍,如前述的第2-第4个关键词。 REST API的优点:缓存Cache提高响应性能,本身的“无状态”和“扩展性”,不需要额外的资源发现机制 ...

    django-rest-work笔记

    Some reasons you might want to use REST framework: The Web browsable API is a huge usability win for your developers. Authentication policies including packages for OAuth1a and OAuth2. Serialization ...

    Python-定位个人笔记和公司内部知识仓库基于djangovue的笔记软件

    【Python-定位个人笔记和公司内部知识仓库基于djangovue的笔记软件】 在这个项目中,我们关注的是构建一个结合了个人笔记管理与企业内部知识仓库功能的应用。它基于两个强大的技术栈:Django(一个高级Python Web...

    Jupter-Notebook-REST-API:将jupyter笔记本作为REST API端点运行。 这不是Jupyter服务器,而是一种将笔记本作为REST API端点运行的方式

    Jupter笔记本REST API 将jupyter笔记本作为REST API端点运行。 这不是jupyter服务器,而只是一种将笔记本作为REST API端点运行的方式。 在本地运行 克隆项目 mkdir rest-project cd rest-project git clone ...

    SSM笔记-SpringMVC REST风格、基本标签初识

    本笔记将深入探讨如何在SpringMVC中创建RESTful的API。 1. **REST原则** - 统一接口:REST接口应具有统一的格式,通常使用HTTP方法(GET、POST、PUT、DELETE等)来表示操作。 - 状态转换:每个请求都包含完成操作...

    云笔记项目

    7. **RESTful API设计**:为了实现跨平台的数据交换,云笔记项目可能采用了REST(Representational State Transfer)架构风格来设计API。这些API遵循统一的URI(Uniform Resource Identifier)和HTTP方法,便于...

    读书笔记:Junit5+maven+Restassured企业微信接口实战演练项目.zip

    读书笔记:Junit5+maven+Restassured企业微信接口实战演练项目

    django笔记 django笔记

    本笔记将深入探讨Django的基础概念、核心功能以及实际应用。 1. **Django简介**: Django是由两位美国开发者在2005年创建的开源项目,它遵循MVC(模型-视图-控制器)设计模式,但更倾向于MTV(模型-模板-视图)...

    JavaWeb笔记[培训时,老师做的笔记]

    11. **RESTful API设计**: 如何使用JavaWeb创建符合REST原则的Web服务,包括HTTP动词、状态码和URI设计。 12. **Ajax异步通信**: 使用JavaScript和XMLHttpRequest对象实现客户端与服务器的异步数据交换,提升用户...

    SpringCloud笔记+思维导图

    可以清晰地展示出SpringCloud的各个组成部分,比如Eureka(服务发现)、Zuul(边缘服务和API网关)、Hystrix(容错管理)、Ribbon(客户端负载均衡器)以及Feign(声明式REST客户端)等。通过这样的思维导图,学习者...

    Jave云笔记开发

    遵循REST原则设计API,可以使服务更加灵活且易于扩展。 5. **数据库管理**:选择合适的数据库系统,如MySQL、PostgreSQL或者NoSQL数据库如MongoDB,用于存储用户笔记数据。需要理解SQL查询和非关系型数据库的操作。...

    SpringCloud学习笔记

    【SpringBoot核心特性】 SpringBoot是Spring框架的一个扩展,它旨在简化Spring应用程序的开发过程,...这份学习笔记涵盖了SpringBoot的基础特性和SpringCloud的负载均衡实践,对于深入理解这两个技术有极大的帮助。

    SpringCloudGateway初学者学习笔记

    此笔记由本人跟随尚学堂教师一步一讲解梳理出来的 网关的角色是作为一个 API 架构,用来保护、增强和控制对于 API 服务的访问。 API 网关是一个处于应用程序或服务(提供 REST API 接口服务)之前的系统,用来管理...

    java云笔记

    6. **RESTful API设计**:为了实现跨平台访问,Java云笔记可能通过设计符合REST(Representational State Transfer)原则的API,使其他客户端如移动应用或桌面应用也能无缝接入。 7. **容器化部署**:考虑到云环境...

    java笔记全套下载

    17. **RESTful API设计**:理解和创建符合REST原则的Web服务。 18. **微服务架构**:了解Docker、Spring Boot、Spring Cloud等在微服务中的应用。 最后,学习Java笔记可能还会涉及到持续集成/持续部署(CI/CD)工具,...

    私人笔记本

    WebService是一种基于互联网的、可互操作的软件接口,它能够通过标准协议(如SOAP或REST)提供数据交换。在这个案例中,私人笔记本可能使用了特定的Weather API,通过发送请求获取指定地点的实时天气状况,如温度、...

Global site tag (gtag.js) - Google Analytics