CTO事件簿中,突然使用GraphQL实现FrontendServer
阅读即可理解的事情
能理解微服务的外观,前端服务器和GraphQL的大致框架。
目录
-
- 微服务是什么?
-
- 前端服务器是什么?
-
- GraphQL是什么?
-
- FiNC架构
- 未来展望
1. FiNC和微服务
请参考以下内容,FiNC采用了MicroService。
我认为从去年开始,我们开始策划微服务Meetup并且活跃了FiNC内部的活动。在后端领域也展现出相当的热情。
这个聚会上经常会讨论的一个话题是Frontend Server。
当服务变得越来越多时,客户端不知道该调用哪个API,会造成调用多个请求并且效率低下,引发争论。
2. 前端服务器
解决上述问题的是FrontendServer。
Backend服务器是按照Rest的设计构建的,当客户端请求FrontendServer时,它会返回与视图对应的数据,非常优秀。
目前,FiNC正在引入其应用程序的功能。FiNC采用了GraphQL等框架。
3. GraphQL是什么?
请参考官方网站(http://graphql.org/learn/)
GraphQL是一种用于API的查询语言,它是在服务器端运行时使用所定义的类型系统来执行查询的。GraphQL不与特定的数据库或存储引擎相关联,而是基于现有的代码和数据。GraphQL服务是通过定义这些类型的类型和字段,并为每个类型的每个字段提供函数来创建的。例如,GraphQL服务可以表示登录用户为(我)并显示该用户的名称。
type User {
id: ID
name: String
}
type Query {
me: User
}
通过定义方式来获取用户的名称时,只需从客户端发出查询即可将数据输出出来。对应的返回值如下所示。
{
me: {
name: "Mitsunori Nanno"
}
}
以下为客户端的查询
{
me {
name
}
}
4. 針對FiNC的架構。
使用Node、GraphQL和koa进行构建。
构建步骤如下所示。
npm install apollo-server body-parser express graphql graphql-tools
相当简单。
从这里开始,将各个服务的API通过InternalAPI合并并返回给Client。
由于Query是由生成器(generater)创建在GraphQL服务端上的,所以任何人都可以相当轻松地创建。
5. 未来
因为每个服务的API的响应都是通过JsonSchema定义的,所以连接GraphQL和API的部分工作量是多余的。如果能够创建一个可以自动生成GraphQL代码的生成器,并且能够自动添加JsonSchema,那将非常好。
我想考虑如何在明年构建FrontendServer而不浪费时间。