FrankKai / FrankKai.github.io

FE blog
https://frankkai.github.io/
363 stars 39 forks source link

GraphQL入门 #147

Open FrankKai opened 5 years ago

FrankKai commented 5 years ago

记录一些自己觉得比较有用的GraphQL知识点。

相关资料: https://www.howtographql.com/basics/1-graphql-is-the-better-rest/ https://www.v2ex.com/t/544541

FrankKai commented 5 years ago

说明很多公司都前后端分离后碰到了各种恼人的开发与沟通问题

1.浪费性能、流量和带宽 返回不需要的字段、对象等

2.各种奇葩的缩写、混乱的命名 各种缩写、拼音、驼峰和非驼峰混用等, 只有看文档才知道是什么、才知道用哪个,而且文档还很可能有错误。 例如 评论数量可能是 commentCount, comment_count, cmt_count, pl_num... 分页页码可能是 page, pageNum, page_number, page_num, pnum...

3.数据类型不稳定或随意改变 对象为空时应该返回 null 或 {} ,但实际会返回空数组 [], 甚至是 "", "[]" 等 ,导致前端解析崩溃; 后端擅自改变类型导致线上 App 崩溃...

4.几百甚至上千个混乱的状态码 各项目几乎完全不通用,不看相关的内部文档根本不知道对应的错误是什么,而且文档还很可能有错误。 例如 注册: 成功 600, 手机号不合法 601, 验证码错误 603, 手机号已注册 607, 缺少必要字段 609... 评论: 成功 1070, 不允许评论 1071, 参数错误 1073, 动态被删除 1075...

5.文档过时,与接口不同步 后端把接口改了没有及时通知,前端 /客户端莫名其妙调了半天才发现

6.应用界面和接口强耦合难分离 比如某个版本的 QQ 空间动态的 JSON 结构必须对应某个版本的某个接口, 有时候 JSON 结构甚至是由后端拍脑袋决定的,不好用也得用

7.版本迭代导致大量重复功能的接口 为了兼容旧版应用不好直接改原来的接口,一般只能新增

8.前端 /客户端与后端扯皮 前端 /客户端想要一次性返回或者更方便解析的结构,但后端想要少写代码

9.数据库操作不安全 delete 忘加 where 直接删光全部数据,只要发生一次

10.开发流程繁琐周期长 后端写接口>后端写文档>前端 /客户端查文档>(前端 /客户端关于文档向后端提问>后端解决问题并通知或等待再次被问)>前端 /客户端调用接口>(前端 /客户端关于实际使用向后端提问>后端解决问题并通知或等待再次被问)>前端 /客户端解析返回结果>(前端 /客户端关于返回内容或结构向后端提问>后端解决问题并通知或等待再次被问)

type Mutation { createPerson(name: String!, age: Int!): Person! }

type Subscription { newPerson: Person! }

type Person { name: String! age: Int! posts: [Post!]! }

type Post { title: String! author: Person! }