Tag: rest

RESTful服务 – WSDL等效

我一直在阅读关于REST和SOAP的知识,并理解为什么实现REST可能比使用SOAP协议有益。 然而,我仍然不明白为什么REST世界中没有“WSDL”等价物。 我看过post说WSDL没有“需要”,或者在REST的世界里是多余的,但我不明白为什么。 以编程方式绑定到定义并创build代理类而不是手动编码总是有用吗? 我不打算进行哲学辩论,只是寻找REST中没有WSDL的原因,或者为什么不需要它。 谢谢。

通过REST(RESTful)API批量收集操作

我想在devise一个REST API的build议,这将允许客户端高效地添加/删除大量的对象集合。 通过API,客户需要能够将项目添加到collections中,并从中删除项目以及操作现有项目。 在许多情况下,客户将要对集合进行批量更新,例如添加1000个项目并删除500个不同的项目。 感觉像客户端应该能够在与服务器的单个事务中执行此操作,而不是要求1000个单独的POST请求和500个DELETE。 有没有人有关于实现这一目标的最佳做法或惯例的任何信息? 我目前的想法是,应该能够代表对收集URI的变化的对象,但这似乎与HTTP 1.1 RFC不一致,这似乎表明,在PUT请求中发送的数据应该独立于数据已经存在于URI中。 这意味着客户必须一次性发送一个完整的集合状态描述,这个描述可能比变化要大得多,甚至比客户提出请求时要多。 显然,如果有必要,我会很乐意偏离RFC,但是如果存在这样的惯例,则希望以传统的方式进行。

REST和身份validation变体

我目前正在为.net创build一个REST库,并且我想听到一些关于我有一个开放点的意见:REST和身份validation。 以下是与库一起使用的RESTful接口的示例: [RestRoot("/user")] public interface IUserInterface { [RestPut("/")] void Add(User user); [RestGet("/")] int[] List(); [RestGet("/get/{id}")] User Get(int id); [RestDelete("/delete/{id}")] void Delete(int id); } 然后,服务器代码只是实现接口,客户端可以通过工厂获得相同的接口。 或者,如果客户端不使用该库,则标准HTTP请求也可以使用。 我知道使用HTTP Basic Auth或向需要authentication用户的请求发送令牌的主要方式。 第一种方法(HTTP Basic Auth)具有以下问题(部分是Web浏览器特定的): 每次请求都会传输密码 – 即使使用SSL,也会有某种“不好的感觉”。 由于密码是通过请求头传输的,因此本地攻击者很容易查看传输的头文件来获取密码。 密码在浏览器内存中可用。 没有标准的方法来过期用户“会话”。 用浏览器login会中断页面​​的外观。 第二种方法的问题更侧重于实现和图书馆使用: 每个需要authentication的请求URI都必须有一个令牌参数,这只是非常重复的。 如果每个方法实现需要检查一个标记是否有效,那么有更多的代码需要写入。 接口将变得不那么具体,例如[RestGet("/get/{id}")]与[RestGet("/get/{id}/{token}")] 。 在哪里放置令牌:在URI的末尾? 之后的根? 别的地方? 我的想法是将标记作为parameter passing给URL,如http:/server/user/get/1234?token=token_id 。 另一种可能性是将参数作为HTTP头发送,但是这会使我们猜测普通HTTP客户端的使用复杂化。 令牌将作为每个请求上的自定义HTTP头(“X-Session-Id”)传递回客户端。 这可以从界面完全抽象出来,任何需要authentication的实现都可以只是询问哪个用户(如果给定的话)属于哪个用户。 你是否认为这样做会违反REST,或者你有什么更好的想法?

HATEOAS:绝对或相对的url?

在使用HATEOASdeviseREST风格的Web服务时,将链接显示为完整的URL(“ http:// server:port / application / customers / 1234 ”)与只显示path(“/ application /客户/ 1234" )?

RestSharp简单完整的例子

我一直在试图创build一个简单的原型Web应用程序,使用RestSharp来调用Rest API。 我一直没有find一个很好的例子。 任何人都可以请分享和指导我正确的资源吗? 我已经看过以下,并没有提供我在找什么,即全function的例子: http://restsharp.org/ (没有例子的完整应用) http://www.stum.de/2009/12/22/using-restsharp-to-consume-restful-web-services/ (似乎是老) 虽然原型,我得到下面的代码错误: RestResponse response = client.Execute(request); *Cannot implicitly convert type 'IRestResponse' to 'RestResponse'. An explicit conversion exists (are you missing a cast?) *

在Go中,断开语句是否从开关/select中断开?

我知道switch / select语句会在每个case后自动中断。 我想知道,在下面的代码: for { switch sometest() { case 0: dosomething() case 1: break default: dosomethingelse() } } break语句是否退出for循环或者只是switch块?

用所有RESTful函数生成一个控制器

我正试图生成一个控制器与所有的REST风格的动作。 我已经阅读链接文本 ,我所需要做的就是使用调用发电机只有一个控制器的名字,我会得到这一点。 所以,我运行“脚本/生成rspec_controller属性”,我得到一个空的控制器。 任何其他build议将不胜感激。

@PathParam和@QueryParam有什么区别?

我是REST风格的jersey的新手。 我想问一下jersey中的@PathParam和@QueryParam什么不同?

我可以使用UriTemplate将非string传递给WCF RESTful服务吗?

我可以做以下吗? [OperationContract] [WebGet(UriTemplate = "/foo/{id}")] string GetFoo(int id); 我希望我的服务既可以作为REST风格的服务,也可以作为RPC风格的SOAP服务。 如果可能的话,我想保留int作为整数,而不是手工parsing。

如果通过REST进行交易是不可实现的,那么REST如何才能真正有用?

在研究REST的时候,可能有人会注意到的第一件事情是没有定义任何事务语义,有人说这是隐含地反对REST的,而另一些人则认为任何尝试这样做都会导致REST系统。 但是为了争辩起见,REST确实成为了stream行的“api”select,宇宙中的每个站点都开始暴露出平静的入口点。 如果没有交易行为,这些可用性究竟如何(我说的是无补偿的)? 因为在我看来,REST的好处之一就是它打破了数据的组成部分,这样你就可以打开它让智能客户端从多个服务组成数据(并添加和调整这些组合的数据)。 但是,如果我不能自己对这个数据组合进行更改,那么使用REST就变得毫无用处。 随着时间的推移以及对严肃的数据展示的需求的到来,我们需要的东西是:Simple(REST在那里获胜),并且支持事务行为,所以我们可以可靠地处理这些数据。 现在,我已经在我的研究中多次阅读了一个特定的论证,并且涉及到我们应该如何考虑REST中的事务,并且给出的示例是购物车,因为购物车隐含地具有隔离,因为购物车是你的。 然而,我不同意这个观点,首先,购物车的隔离仅仅是方便的,这不是一个交易隔离。如果我同时对我的购物车进行操作,而我的应用程序的某些部分正在读取数据从中? 我不希望我的应用程序的阅读部分看到“仍在交易中”的数据。 更不用说,并非所有的数据变化都有一个隐含的事务模型,多个服务上的事务处理肯定不会。 在我看来,事务需要发生,并且需要以使得实际的REST调用不知道事实的方式发生(添加到其余的有效负载是一个很大的否定,但添加标头是可以的)。 我已经阅读了一些关于如何通过REST创build事务模型的build议,并且一些正在编写的规范似乎是最近的。 有没有关于这个的真实想法? 不应该有比REST更多的东西,这样REST的简单性就可以用来抵御可靠的数据操作(“酸”交易)。 如果没有,我们是否真的想要赌注,并告诉服务开发者,如果他们想要在纯数据世界中进行交互,他们需要支持像肥皂这样可以说是单一的东西? 或者更糟的是尝试将自己的自定义事务支持构build到REST之类的东西中,使得每个服务都是非标准的并打破了REST的全部function? 在此先感谢您的任何想法。 编辑,添加简短的情况: 设想一个处理相册创build的客户表单,为了方便使用该相册,而不是要求用户给出艺术家资源的URI,他们可以从艺术家列表中select(最有可能从艺术家目录中获取) 。 为了便于使用,客户可以手动编写艺术家姓名,以便他们可以在发布场景中创build艺术家“内嵌”..客户端代码理解这一点,并且在发送请求创build相册之前,首先尝试确定如果艺术家已经存在,如果是的话,获得该艺术家的uri,否则创build艺术家,并获得艺术家uri。 然后,客户端代码继续创build相册,这是比平常更聪明的客户端,它不是坐​​在REST之上,“愚蠢”的发布,而是有一些交互处理纯粹的REST逻辑。 然而,在这种情况下,如果艺术家是首先创build的,那么保证艺术家不会被创build,除非专辑是创build的。 这不像交易所暗示的那样“关键”,但是它定义了客户端代码倾向于作为一个操作发生的一组工作(毕竟,它使得这看起来像对用户的单个操作)。 我在这个场景中看到的唯一指导就是让客户端在相册创build失败的情况下进行补偿操作,特别是打电话删除艺术家。 但这似乎有问题,因为客户假设艺术家是孤立的,尽可能不太可能,如果另一个客户已经“看到”该艺术家,并分配给它会发生什么? 这些是我对数据变化的担忧,虽然还有其他的差距(谁说艺术家不能在晚些时候被删除),那么这些行为是不透明的(即,行为不是自动的客户端,但用户特别要求的东西)。 我希望有助于阐明这个话题。