如何在Hasura中扩展自定义业务逻辑 满足电商项目非CRUD需求
Hasura 自定义业务逻辑实现方案解答
你确实遗漏了Hasura提供的另外两种可复用原生能力的自定义逻辑实现方式,完全可以覆盖登录、下单这类业务场景:
1. PostgreSQL自定义函数直接暴露为GraphQL接口
这是最适合同步、强数据关联类业务逻辑的方案,你可以直接用PL/pgSQL编写业务逻辑函数,Hasura会自动将函数转换为原生的GraphQL Query/Mutation,全程不需要额外搭建后端服务,所有表操作都直接复用你已经在Hasura中配置的表结构、权限规则:
以登录逻辑为例,你可以直接编写如下数据库函数:
CREATE OR REPLACE FUNCTION public.login(username text, input_password text) RETURNS text AS $$ DECLARE matched_user public.user; generated_token text; BEGIN -- 直接查询用户表,复用已有表结构 SELECT * INTO matched_user FROM public.user WHERE username = $1 LIMIT 1; IF matched_user IS NULL OR matched_user.encrypted_password != crypt(input_password, matched_user.password_salt) THEN RAISE EXCEPTION '用户名或密码错误'; END IF; -- 写入session表生成登录凭证 generated_token := gen_random_uuid()::text; INSERT INTO public.session(user_id, token, expire_time) VALUES (matched_user.id, generated_token, NOW() + INTERVAL '7 day'); RETURN generated_token; END; $$ LANGUAGE plpgsql SECURITY DEFINER;
你只需要在Hasura控制台中追踪这个函数,即可直接调用自动生成的login mutation完成登录逻辑,所有数据库操作都不需要你自己处理连接、权限校验,完全复用Hasura的原生能力。
2. Actions配合内部GraphQL调用
如果你的业务逻辑涉及外部依赖(比如调用短信接口、第三方支付),需要用自定义服务处理时,也不需要自己单独操作数据库:你可以在Actions对应的后端服务中,直接调用Hasura原生的GraphQL接口完成所有CRUD操作,复用Hasura自动生成的增删改查能力、权限控制逻辑,只需要编写核心的业务判断代码即可。
3. Event Trigger异步逻辑处理
针对下单后扣库存、发通知这类不需要同步返回的异步业务,你可以使用Hasura的Event Trigger能力,监听对应表的增删改事件,触发自定义的webhook处理逻辑,webhook中同样可以调用Hasura的原生GraphQL接口完成后续数据操作,不需要自己对接数据库。
内容的提问来源于stack exchange,提问作者Ron
相关产品推荐
相关产品推荐

