1

我最近研究了 Odata 和 SCIM 协议。两者都提供 REST 服务,但不清楚 SCIM 的缺点,这使得 OData 更偏爱 Restful 服务。有人可以帮我理解差异吗?

4

3 回答 3

3

这是一个很好的问题,也是我在开发我们的私有云身份平台时不得不处理的问题。这是我(啰嗦)的看法:

OData ( http://odata.org ) 是一组用于建模和访问各种数据的标准:关系、分层、图形,应有尽有。它提供了一种用于定义数据模型的语言(阅读:模式)和一种定义 API 以访问该数据的标准方法。OData 一开始就牢牢扎根于 XML,但在过去几年中已经发展为 HTTP/JSON。

SCIM ( http://www.simplecloud.info/ ) 从一个更有限的范围开始:提供一个用于配置身份数据的 REST API,即用户和组。SCIM v2 扩展为包括模式可扩展性以及搜索和 CRUD 操作。从这个意义上说,SCIM 的演变与服务供应标记语言 (SPML) 的演变非常相似。在很多方面,SCIM 是一种 RESTful、JSON-y 版本的 SPML。

这两个标准以不同的目标开始,但在功能方面有所收敛。即便如此,OData 也更具表现力。想到几个方面:

  • 查询表达式——SCIM 仅限于将属性与文字值进行比较的表达式,例如~/Users?filter=surname eq “smith”,结合“and”s 和“or”s。OData 支持将属性与其他属性进行比较,例如 ?$filter=Surname eq Title,甚至可以比较不同实体的属性。我怀疑 SCIM 在这方面的局限性来自 LDAP 对其设计者和早期用例的影响。

  • 复杂数据模型的查询——SCIM 和 OData 都支持使用 URL 公开资源之间的关系。这使您可以创建更丰富的数据模型。但是 SCIM 查询语言不允许
    对导航 (“$ref”) 属性进行操作,因此您不能
    在资源之间导航作为查询的一部分。OData 将导航
    属性合并为数据模型的一部分,因此,您可以
    使用单个 OData 查询来(例如)“返回分配给我的项目的所有为我老板的老板工作的人”。你可以的
    当然使用 SCIM 执行此操作,但由客户端应用程序执行导航、维护状态等。OData 更像 SQL,因为它可以让您将查询复杂性转移到服务器上。总的来说,这是一个好主意,当客户端是像手机这样的受限设备时,这一点至关重要。

  • 函数和操作——SCIM 定义了一个用于 CRUD 和搜索
    操作的 API,但仅此而已。OData 提供了对
    其他类型 API 的定义。例如,您可以定义一个名为“SendEmail”的实体绑定 API,它接受一条消息作为其参数之一,
    系统会在上下文中向实体发送一封电子邮件。在我看来,这是一个非常强大的概念,它允许应用程序
    发现 API,就像它可以发现
    OData 系统的所有其他内容一样。函数也可以在查询表达式中使用,因此您可以询问诸如“返回所有客户

  • 类型系统——SCIM 本身并没有真正提供类型系统。
    资源按资源类型进行分类,该资源类型定义了该类型资源的允许属性,仅此而已。OData 定义
    类型继承、抽象类型、“开放”(可扩展)类型和
    类型转换,并提供更广泛的原始类型
    (例如地理定位、流、枚举等。OData 还允许您显式定义实体之间的引用约束.

  • 可扩展性 – SCIM(在 v2 中)支持
    向现有资源类型添加新资源类型和附加属性。因为
    OData 是数据模型驱动的,所以一切都是可扩展的,包括
    实体、属性、关系、函数和操作。

如果 OData 是一种比 SCIM 更丰富的数据建模和定义 API 方法,那么为什么还要为 SCIM 烦恼呢?因为 SCIM 是为了解决一个非常具体的问题(身份配置)而开发的,所以它比 OData 更易于理解和实现。如果您的应用程序可以使用 SCIM 1.1 为一个系统提供身份,它可能可以提供给许多其他系统。虽然使用 OData 提供身份信息并不比使用 SCIM 更困难,但每个目标 OData 平台更有可能公开一个稍微不同的模型,这意味着您可能需要为每个目标调整代码。这就是 SCIM 想要解决的问题,而且它在这方面取得了成功。但是如果你想暴露一个丰富的数据模型和一组相应的API(即使是为了身份信息),

于 2017-05-10T20:58:02.470 回答
1

SCIM 专门用于身份管理(例如,用户和组)。OData 是用于构建 RESTful Web 服务的通用框架。您可以使用 OData 创建 SCIM 服务(在 URI 和有效负载格式上有一些细微差别)。

于 2016-05-24T21:19:23.833 回答
0

像任何模式一样,要比较/判断您需要了解他们要解决的问题。它们是解决企业应用程序集成的一种尝试。来自不同供应商的应用程序在不同的操作系统上使用不同的 API 需要一些通用的协议来通信。Think Finance App 与来自不同供应商的 HR 应用程序对话。

那么为什么要使用 REST?因为 REST 建立在 HTTP 之上,这是一个最低公分母标准(但不是一个糟糕的标准),这意味着每个人都可以玩,并且端口 80 是每个防火墙中唯一开放的端口。

OData 是一个更成熟、更全面的标准,但请记住,它是一个标准而不是实现。大多数供应商的标准实施不完整或过时(Microsoft、Oracle、SAP)。因此,在承诺任何事情之前,请确保它具有您需要的功能(现实世界)。

于 2017-05-11T05:49:30.090 回答