函数的开发级别与类别
大约 2 分钟
函数的开发级别与类别
函数开放级别
开发中通常会因为安全性,为方法定义不同的开放层级,或者通过应用分层把需要对web开放的接口统一定义在一个独立的应用中。oinone也提供类似的策略,所有逻辑都通过Function来归口统一管理,所以在Function是可以定义其开放级别有API、REMOTE、LOCAL三种类型,配置可多选。
四种自定义新增方式与开放级别的对应关系
函数 | 本地调用(LOCAL) | 远程调用(REMOTE) | 开放(API) |
---|---|---|---|
伴随模型新增函数 | 支持 | 支持【默认】 | 支持 |
独立新增函数绑定到模型 | 支持 | 支持【默认】 | 支持 |
独立新增函数只作公共逻辑单元 | 支持 | 支持【默认】 | - |
伴随ServerAction新增函数 | - | - | 必选 |
远程调用(REMOTE)
如果函数的开放级别为本地调用,则不会发布远程服务和注册远程服务消费者
非数据管理器函数
提供者:如果函数定义在当前部署包的启动应用中,则主动发布远程服务提供者。
消费者:如果函数定义在部署依赖包中但未在当前部署包的启动应用中,则系统会默认注册远程消费者。发布注册的远程服务使用命名空间和函数编码进行路由。 所以非数据管理器函数的消费者并不需要感知该服务是否是本地提供还是远程提供。而服务提供者也不需要手动注册远程服务。
数据管理器类函数
提供者:如果数据管理器函数所在模型定义在当前部署包的启动应用中,则系统会主动发布数据管理器的远程服务作为数据管理器的远程服务提供者;
消费者:如果模型定义在部署依赖包中但未在当前部署包的启动应用中,则系统会主动注册数据管理器的远程服务消费者。 所以数据管理器类函数的消费者与服务提供者并不需要感知函数的远程调用。
函数类型
函数的类型语义分为:增、删、改、查,在编程模式下目前用于Function为API级别,生成GraphQL的Schema时放在query还是mutation;查放在query,其余放mutation。