GraphQL 很火, 很厉害, 但是它和 OData 有本质的区别. 所以并不是说任何一样对比另一个绝对的好.

GraphQL is not OData

twitter 的讨论

有几个点是我能 Get 的到的.

OData = SQL in URL

OData was a way to serialize a SQL statement into a URL (OData 就像 SQL 语句的 URL 版本)

it challenging to limit the exposure 要限制 client side 的 query 能力是很困难的.

OData Standardized

OData 的规范是它的优势, 就好比 RPC 对 RESTful一样. RESTful 有规范, 容易理解, 但是不容易表达万物. RPC 则可以表达万物, 但又太没有规范了.

Flaws in OData

OData 通常和 database schema 邦的比较紧 (所以说它像 SQL Query), 一旦 schema 换了, 但又想维护旧的版本会比较难.

OData 偏向统一管理, 很难对特殊案例做优化.

最好的描述

OData 像 SQL Query, GraphQL 像 stored procedure. 你慢慢品.

所以这 2 者一定是共存的, 而且是互相补助的.

总结

OData 像 SQL Query, GraphQL 像 stored procedure.

OData 像 RESTful, GraphQL 像 RPC

当你希望简单统一的时候, 你会觉得 RESTFul 很棒, SQL Query 就够用了, OData 很好.

但当你遇到特别情况, 没办法用简单的方式的时候, RPC, stored procedure, GraphQL 就凸显它的魅力了.

我们看双方的使用场景. OData 倾向于企业应用的 API, SAP 这类. 通常是比较简单的, 关系数据库 pattern.

GraphQL 则是互联网应用, 公开的 API,  whatever 类型数据形式的 (比如 NoSQL)

所以总结 GraphQL 比 OData 可以表达更多 (更自由), OData 比 GraphQL 有规则 (更约束)

到底是哪一个, 还是对外 GraphQL, 对内用 OData, 真的是看项目用了才知道呢.

OData – OData vs GraphQL的更多相关文章

  1. Asp.net core 学习笔记 ( OData )

    2018-12-10 更新 : 从前我都是把 entity 直接用于 odata 曝露 api 给程序用. 如果这个程序是我们自己写的前端,这样的方式非常好,因为就好比前端可以直接对数据库每一个表做操 ...

  2. OData的初步认识

    What – OData是什么? OData - Open Data Protocal,是一个设计和使用RESTful API的标准.REST本身只是一个构建web服务的思想和理念,其没有规定一个统一 ...

  3. OData V4 系列 服务创建

    OData 学习目录 创建应用程序 添加引用 install-package entityframework . Install-Package Microsoft.AspNet.Odata . In ...

  4. 在ASP.NET Web API中使用OData

    http://www.alixixi.com/program/a/2015063094986.shtml 一.什么是ODataOData是一个开放的数据协议(Open Data Protocol)在A ...

  5. 使用ASP.NET Web API 2创建OData v4 终结点

    开放数据协议(Open Data Protocol[简称OData])是用于Web的数据访问协议.OData提供了一种对数据集进行CRUD操作(Create,Read,Update,Delete)的统 ...

  6. OData – the best way to REST–实例讲解ASP.NET WebAPI OData (V4) Service & Client

    一.概念介绍 1.1,什么是OData? 还是看OData官网的简单说明: An open protocol to allow the creation and consumption of quer ...

  7. Asp.Net Web API 2第十七课——Creating an OData Endpoint in ASP.NET Web API 2(OData终结点)

    前言 很久没更新博客了,加上刚过年,现在准备重新开战,继续自己的学习之路.本文已同步到Web API2系列文章中http://www.cnblogs.com/aehyok/p/3446289.html ...

  8. SharePoint 2013 REST 以及 OData 基础

    这篇文章会介绍: 简单的介绍REST,OData OData实现细节 OData在SharePoint 2013中的实现 为什么REST很重要 过去几年基于REST的webservice在IT企业越来 ...

  9. Web service standards: SOAP, REST, OData, and more

    Web service standards: SOAP, REST, OData, and more So far, we've covered the components of a web ser ...

  10. WCF Data Service 使用小结 (一)—— 了解OData协议

    最近做了一个小项目,其中用到了 WCF Data Service,之前是叫 ADO.NET Data Service 的.关于WCF Data Service,博客园里的介绍并不多,但它确实是个很好的 ...

随机推荐

  1. [rCore学习笔记 03]配置rCore开发环境

    写在前面 本随笔是非常菜的菜鸡写的.如有问题请及时提出. 可以联系:1160712160@qq.com GitHhub:https://github.com/WindDevil (目前啥也没有 rCo ...

  2. SQL Server 新增函数大全(各版本)

    SQL Server 2017 CONCAT_WS ( separator, argument1, argument2 [, argumentN]... ) --采用可变数量的字符串自变量,并将它们串 ...

  3. JavaScript 常用 Web APIs

    Web APIs Web APIs DOM 页面文档对象模型 DOM 树 获取元素 事件 监听事件 事件解绑 操作元素 样式属性操作 结点操作 结点关系 创建节点 DOM 事件流 事件对象 常用鼠标事 ...

  4. 字符—字符与整数的关系&&常用的库函数_C

    // Code file created by C Code Develop #include "ccd.h" #include "stdio.h" #incl ...

  5. SpringBoot+ Sharding Sphere 轻松实现数据库字段加解密

    一.介绍 在实际的软件系统开发过程中,由于业务的需求,在代码层面实现数据的脱敏还是远远不够的,往往还需要在数据库层面针对某些关键性的敏感信息,例如:身份证号.银行卡号.手机号.工资等信息进行加密存储, ...

  6. c++ 异常记录

    vector的排序使用的iterator必须先+1 再-1,否则报溢出警告,不能正确排序遍历map获取到的是对象副本,需要引用,不能直接拿来做引用 fortmat只支持原始类型,wstring,str ...

  7. vue项目 回到顶部功能 定位在头部

    'backBox'是外层容器类名, 根据传入的index,定位在不同的位置 组件: <template> <div class="toTop" @click=&q ...

  8. 这本vue3编译原理开源电子书,初中级前端竟然都能看懂

    前言 众所周知vue提供了很多黑魔法,比如单文件组件(SFC).指令.宏函数.css scoped等.这些都是vue提供的开箱即用的功能,大家平时用这些黑魔法的时候有没有疑惑过一些疑问呢. 我们每天写 ...

  9. 【微信小程序】 侧边栏菜单查询

    原因 开发的项目在WX小程序上有个新需求 就是在用户[我的]界面里的菜单中多加一个[我的服务] 之前有提及过,服务消息被按8个消息类型拆成了8张表 对应,在小程序界面这里也应该放上对应8个菜单,按菜单 ...

  10. 【RabbitMQ】07 SpringBoot整合RabbitMQ

    生产者和消费者的依赖基本一致: 注意工程名称不是一样的 <?xml version="1.0" encoding="UTF-8"?> <pro ...