# nop-simple-demo **Repository Path**: a-crud-boy/nop-simple-demonn ## Basic Information - **Project Name**: nop-simple-demo - **Description**: 学习nop框架 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-01-31 - **Last Updated**: 2024-01-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 总结 Nop平台调试模式启动Nop平台的调试模式,只需设置`nop.debug=true`。在调试模式下,可以通过以下链接获取所有服务定义: - `/p/DevDoc__graphql` - `/p/DevDoc__beans` 例: - `127.0.0.1:8080/p/DevDoc__graphql` 可以看到对外暴露的所有服务定义。 例如: `type DemoEntity{ "SID" sid : String "名称" name : String "状态" status : Int "状态文本" status_label : String }` - `127.0.0.1:8080/p/DevDoc__beans` 可以查看所有对象定义。 例如:`` ## 注意事项 1. 前端的REST链接根据对象名和方法名自动推定,无需手工指定,固定格式为: `/r/{bizObjName}__{bizMethod}`。 注意是两个下划线。 2. `@BizQuery`允许通过GET和POST两种HTTP方法调用,而`@BizMutation`只允许通过POST方法调用。 3. 通过GET方式调用时,可以通过URL链接来传递参数,例如`/r/Demo__hello?message=abc`。通过POST方式调用时可以通过URL来传参,也可以通过Http的body使用JSON格式传递。 4. 可以通过`@Name`来一个个的指定前台参数,也可以通过`@RequestBean`将前台传递过来的所有参数包装为指定的JavaBean类型。 5. 服务函数总是返回POJO对象,并指定按照JSON格式进行编码。 ## 示例API访问 ### **REST** 例1,带响应状态: - 访问`127.0.0.1:8080/r/Demo__hello?message=abc` - 响应: { "data": "Hi,abc", "status": 0 } 例2,不带响应状态: - 访问127.0.0.1:8080/p/Demo__hello?message=abc - 响应: Hi,abc 其他类似: - 127.0.0.1:8080/r/DemoEntity__findByName?name=abc - 127.0.0.1:8080/r/Demo2Entity__findByName?name=abc ### **GraphQL** 例1(查询),关键字query: - 访问`POST 127.0.0.1:8080/graphql` - 请求体: query{ Demo__hello(message:"2343") } - 响应 { "data": { "Demo__hello": "Hi,abc" } } 例2(更新),关键字mutation: - 访问`POST 127.0.0.1:8080/graphql` - 请求体: mutation { Demo__testOk( name: "zhagnsan", email: "123@qq.com" ) { name result } } - 响应 { "data": { "Demo__hello": "Hi,abc" } } 例3(保存),关键字mutation: - 访问`POST 127.0.0.1:8080/graphql` - 请求体: mutation { DemoEntity__saveEntity(data: {name: "zhagnsan", status: 1}) { sid name status } } - 响应 { "data": { "DemoEntity__saveEntity": { "sid": "23410bb4cdd74fc7bd2c1795059ff8a1", "name": "zhagnsan", "status": 1 } } } 例2跟例3有点类似于spring中的加RequestBody跟不加RequestBody的区别, 用 @RequestBean注解就直接写属性字段,@Name需要把方法中的对象参数名写在前面 ## 文件命名规范 平台内所有会被自动识别并处理的文件模式已在此文档中列举: Nop平台内部约定了一定的资源路径模式,会自动查找满足模式的文件进行加载。 ```` META-INF/services io.nop.core.initialize.ICoreInitializer 使用Java内置的ServiceLoader机制注册分级初始化函数 CoreInitialization会读取所有CoreInitializer,按照优先级顺序执行 bootstrap.yaml 静态全局配置文件,其中的内容优先级最高,不会被外部配置所覆盖 application.yaml 全局的配置文件 application-{profile}.yaml 全局的配置文件,profile是通过nop.profile指定的部署环境名称 _vfs/ /_delta /{deltaDir} 这里是delta层的名称,缺省会加载default层 这里的文件会覆盖标准路径的同名文件 /dict {dictName}.dict.yaml 字典文件不会被自动加载,但是通过dictName加载指定字典文件 /i18n /{locale} {moduleName}.i18n.yaml I18nManager初始化的时候会自动加载所有i18n文件 /nop /aop {xxx}.annotations Nop的AOP代码生成器生成包装类时会读取所有的annotations文件,并为每个标注了指定注解的类生成AOP包装类 /autoconfig {xxx}.beans NopIoC会自动扫描解析所有后缀名为beans的文件,加载其中的beans.xml文件 /core /reigstry {xxx}.register-model.xml 初始化时会自动扫描所有registry-model.xml文件,并注册对应的DSL模型解析器, 将它们和特定的文件类型关联起来 /dao /dialect /selector {xxx}.selector.xml 初始化时会自动扫描所有selector.xml文件,加载数据库方言的匹配规则 {dialectName}.dialect.xml 数据库方言定义文件,按照dialectName来加载 /main /auth /main.action-auth.xml 全局的操作权限和菜单定义文件,在其中通过x:extends来引用其他权限文件 /main.data-auth.xml 全局的数据权限定义文件,在其中通过x:extends来引用其他数据权限文件 /{moduleId} Nop模块的moduleId必须是nop/auth这种两级目录结构 _module 每个Nop模块下都有一个_module文件来标记它是模块。 /beans app-{xxx}.beans.xml NopIoC启动时会自动扫描每个模块的beans目录下以`app-`为前缀的beans.xml文件 /model {bizObjName}.xbiz 所有的服务对象原则上都是要在beans.xml中注册,然后再通过对象名查找到对应的xbiz和xmeta文件 {bizObjName}.xmeta NopDynEntity对象采用了简化注册流程,直接向BizObjectManager注册,没有在beans.xml中定义服务对象 /orm app.orm.xml NopOrm引擎初始化的时候会加载所有模块的orm目录下的app.orm.xml模型文件 /pages /{bizObjName} {pageId}.page.yaml 可以配置页面文件在系统初始化的情况下加载,它引用的view模型因此被连带加载 {bizObjName}.view.xml View模型不会被自动加载,但是一般会放置在这个位置 ````