您的位置:首页 > 其它

Rest(Restful)风格的Web API跟RPC风格的SOAP WebService--这些名词都啥意思?

2016-10-08 22:05 417 查看
经常看到这些词汇,也有baidu或google过,但记忆里总是模糊,不确定,以至于别人问及的时候,总说不清楚。开篇随笔记录下。大家有补充或者意见的尽请留文。

本文顺序:

一、Rest(Restful)跟[b]RPC[/b]

二、SOAP啥意思?

[b]三、实例区分RESTful风格的 Web API与采用RPC风格的SOAP WebService?[/b]

一、REST(REpresentational State Transfer) 翻译为 表现状态转换 有个老头(Fielding)又称之为“分布式超媒体应用”

  REST不是一个标准,而是一种应用架构风格。

  WebAPI采用的就是这种风格。

  这是一种面向资源的架构风格。

  与具体的技术平台无关,即采用REST架构的应用不一定是建立在Web上。

  

  RPC

  RPC则是WebService采用的应用架构风格。

  RPC是一种面向操作(功能)的架构风格

  

  两者啥关系?可以结合Web Service跟Web API

  对于WebService 和 Web API这两个概念,WebService是一个广义的概念,既包括采用RPC的SOAP WebService,也包括直接建立在Web上的非SOAP Web Service,后者又可以称为Web API。至于Web API是否是RESTful的,这取决于设计。

  

二、SOAP(简单对象访问协议)基于百度百科加其他

  SOAP 是基于XML 和 HTTP ,其通过XML 来实现消息描述,然后再通过 HTTP 实现消息传输的一种用于访问Web服务的协议。(是跟HTTP一块玩的,是种协议,这样理解起来~~完美~

[code]1: public class ResourceService
2: {
3:     public IEnumerable<Resource>[] Get();
4:     public void Create(Resource resource);
5:     public void Update(Resource resource);
6:     public void Delete(string id);
7: }

[/code]

[/code]

能否采用统一接口是RESTful Web API和采用RPC风格的SOAP Web服务又一区别。如果采用RPC风格的话,我们在设计Web API的时候首先考虑的是具体哪些功能需要被提供,所以这样的Web API是一组相关功能的集合而已。

以一个具体的场景为例。现在我们需要设计一个Web API来管理用于授权的角色,它只需要提供针对角色本身的CRUD的功能以及建立/解除与用户名之间的映射关系。如果我们将其定义成针对SOAP的Web服务,其服务接口具有类似于如下的结构。

[code]

[code]public class RoleService
{
public IEnumerable<string> GetAllRoles();
public void CreateRole(string roleName);
public void DeleteRole(string roleName);

public void AddRolesInUser(string userName, string[] roleNames);
public void RemoveRolesFromUser(string userName, string[] roleNames);
}

[/code]

[/code]

如下我们需要将其定义成一个纯粹的RESTful的Web API,只有前面三个方法在针对角色的CRUD操作范畴之内,但是后面两个方法却可以视为针对“角色委派(Role Assignment)”对象的添加和删除操作。所以这里实际上涉及到了两种资源,即角色和角色委派。为了使Web API具有统一的接口,我们需要定义如下两个Web API。

[code]

[code] public class RolesService
{
public IEnumerable<string> Get();
public void Create(string roleName);
public void Delete(string roleName);
}

public class RoleAssignmentsService
{
public void Create(RoleAssignment roleName);
public void Delete(RoleAssignment roleName);
}

[/code]

[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: