请问:
为何tRPC的procedure需要使用2种类的操作呢(query和mutation)?
参考官网:
我们看到都是在input验证之后,就进行操作,为何需要query和mutation两种?一种也是可以进行操作的呀?
greeting: t.procedure
.input(z.object({ name: z.string() }))
.query((opts) => `Hello ${opts.input.name}`),
add: t.procedure.input(z.string()).mutation((opts) => {
posts.push(opts.input);
return posts;
}),
为了语义化。
查询就是查询,增改删就是增改删。
就好比 RESTful 里 GET 就是查,你要增那就用 POST,改那就用 PUT,删那就用 DELETE。你非说反正任何参数都能放到 POST Body 里,难道不能全都用 POST 一把梭吗?确实可以,要是你自己“发明”一种协议或规范,那你想怎么干就怎么干,只要你自己能逻辑自洽并且让大家都接受,那你全用 POST 也未尝不可。
但 tRPC 作者本人显然是主张语义化的:https://github.com/trpc/trpc/discussions/1638