颠覆:在.NET中体验GraphQL

Posted DotNet开发跳槽

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了颠覆:在.NET中体验GraphQL相关的知识,希望对你有一定的参考价值。

前言

以前需要提供Web服务接口的时候,除了标准的WEBAPI形式,还考虑了OData、GraphQL等形式,虽然实现思路上有很大的区别,但对使用方来说,都是将查询的主动权让渡给了前端,让调用方能够更加自由地发挥或者符合自己要求的数据。其中,OData作为传统REST WEBAPI的拓展,对外还是WEBAPI的形式,为了照顾到和第三方对接的兼容性,我最终使用了OData作为首选技术。

OData在使用上方便性不言而喻,简直爱不释手,不过逐渐也发现一个问题:Mock不方便!前端常用的比如json-schema-faker无法识别OData的标记,返回的内容依旧是传统API返回的内容(无法输出@odata之类的内容)。

P.S. 最近还非常烦恼和OData一起使用EF Core时,由于有导航属性(Navigation Property),mock框架会循环引用导致Maximum call stack size exceeded的问题。一直没有找好办法,如果有朋友知道,还请不吝赐教。

于是和调用方的扯皮一直延续,最后还是先上线了后台暂时处理了这个问题。最近有一个想法浮到水面:反正mock是不可能mock了,调用方已经要恨死我了,就干脆点直接WebAPI形式也不要了,摊牌了。

GraphQL

GraphQL是Facebook推出的一项提供数据API的语言,和WEBAPI相比较,它有一些自己的特点,详细介绍可以看这里,最吸引我的地方,就是请求API可以一步到位,处理一些逻辑的时候,简单的一个API请求就可以得到所有的数据(当然使用OData的expand等查询也可以达到类似的效果),而且描述语言也比较简洁。这样调用方可以精确描述自己需要什么,接口返回不多不少刚刚好的数据,优雅!

关于GraphQL的介绍,可以查看其他文章,不是本文的重点。

体验

使用GraphQL,.NET支持的有很多库,比较流行的,有GraphQL.NET和HotChocolate,作为一个肥宅,我就选HotChocolate作为主要使用的库,直接使用nuget安装即可。