我最近研究过Odata和SCIM协议。两者都提供REST服务,但我不清楚SCIM的缺点使OData更好地偏爱Restful服务。有人可以帮我理解差异吗?
答案 0 :(得分:3)
这是一个很好的问题,我必须在开发私有云身份平台时处理这个问题。这是我的(啰嗦):
OData(http://odata.org)是一组用于建模和访问各种数据的标准:关系,层次,图形,您可以命名。它提供了一种定义数据模型的语言(读取:模式)和定义访问该数据的API的标准方法。 OData最初扎根于XML,但在过去几年中已发展为HTTP / JSON。
SCIM(http://www.simplecloud.info/)的范围更为有限:提供REST API以供应身份数据,即用户和组。 SCIM v2扩展到包括模式可扩展性以及搜索和CRUD操作。从这个意义上讲,SCIM的发展与服务供应标记语言(SPML)非常相似。在很多方面,SCIM是RESTML,JSON-y版本的SPML。
这两个标准从不同的目标开始,但在功能方面有所收敛。即便如此,OData也更具表现力。我想到了一些方面:
查询表达式 - SCIM仅限于表达式比较 属性为文字值,例如〜/ Users?filter = surname eq“smith”, 结合“和”和“或”。 OData支持比较 属性到其他属性,例如?$ filter = Surname eq Title,and 甚至比较不同实体的属性。我怀疑 SCIM在这方面的局限性来自于LDAP的影响 它的设计师和早期用例。
对复杂数据模型的查询 - SCIM和OData都支持公开
使用URL的资源之间的关系。这允许您创建
更丰富的数据模型。但是SCIM查询语言不允许使用
导航操作(“$ ref”)属性,因此无法导航
资源之间作为查询的一部分。 OData结合了导航
属性作为数据模型的一部分,因此,您可以
使用单个OData查询(例如)“返回所有人
为我的老板的老板工作,他被分配到我的项目“。你可以
当然这是用SCIM做的,但这取决于客户端应用程序
导航,维护状态等。 OData更像是SQL
它允许您将查询复杂性卸载到服务器。这很好
一般而言,当客户端是受限设备时,这一点很重要
像电话一样。
函数和操作 - SCIM为CRUD和搜索定义了一个API
运营,但这就是全部。 OData提供了
的定义
其他种类的API。例如,您可以定义实体绑定的API
称为“SendEmail”,它接受一条消息作为其参数之一,
并且系统将在上下文中向实体发送电子邮件。这是
在我看来是一个非常强大的概念,并允许应用程序
发现API的方式与发现其他所有内容相同
OData系统。函数也可以在查询表达式中使用,所以你
可以询问“退回所有
类型系统 - SCIM本身并不真正提供类型系统
资源按定义允许的资源类型进行分类
该类型资源的属性,但就是这样。 OData定义了
类型的继承,抽象类型,“开放”(可扩展)类型和
类型转换,并提供更广泛的原始类型
(例如地理位置,流,枚举等.OData也允许你
明确定义实体之间的引用约束。
可扩展性 - SCIM(在v2中)支持添加新资源
现有资源类型的类型和附加属性。由于
OData是数据模型驱动的,一切都是可扩展的,包括
实体,属性,关系,功能和行动。
如果OData是一种比SCIM更加丰富的建模数据和定义API的方法,那么为什么还要为SCIM烦恼呢?因为SCIM是为了解决一个非常具体的问题(身份配置)而开发的,所以理解它并且比OData更容易实现。如果您的应用程序可以使用SCIM 1.1为一个系统配置身份,则可以将其提供给许多其他系统。虽然使用OData配置身份信息并不比使用SCIM更困难,但每个目标OData平台更有可能会暴露一个稍微不同的模型,这意味着您可能需要为每个目标调整代码。这就是SCIM打算解决的问题,并且它取得了成功。但是如果你想暴露一个丰富的数据模型和一组相应的API(即使是身份信息),OData也是一个更好的选择。
答案 1 :(得分:1)
SCIM专门用于身份管理(例如,用户和组)。 OData是用于构建RESTful Web服务的通用框架。您可以使用OData创建SCIM服务(在URI和有效负载格式方面存在一些细微差别)。
答案 2 :(得分:0)
与任何模式一样,要比较/判断您需要了解其意图解决的问题。它们试图解决企业应用程序集成。来自不同供应商的应用程序在具有不同API的不同OS上需要一些通用协议进行通信。 Think Finance App与来自不同供应商的HR应用程序交谈。
那么为什么要使用REST?因为REST建立在最低公分母标准的HTTP上(但不是坏标准),这意味着每个人都可以玩,端口80是每个防火墙中唯一可以打开的端口。
OData是一个更成熟和更全面的标准,但请记住它的标准而不是实现。对于大多数供应商而言,他们对标准的实施是不完整或过时的(Microsoft,Oracle,SAP)。因此,在做出任何事情之前,请确保它具有您需要的功能(真实世界)。