Codex的基础脚手架
| 模块 | 说明 | 端口 |
|---|---|---|
| codex-server-gateway | 基础网关服务 | 8000 |
| codex-server-oauth-center | 基础鉴权服务 | 8100 |
| codex-server-user-center | 基础用户服务 | 8200 |
以下内容是协作中的简单约定,不会花费太多时间。这不是一篇长篇大论的文章,建议在项目开始前浏览一遍
| 软件 | 版本要求 |
|---|---|
| JDK | 17+ |
| MySQL | 8+ |
| Gradle | 7.4+ |
| Spring boot | 3.0+ |
| Nacos | 2.2.x+ |
1、数据库主键 id varchar(128)
4、必须拥有"逻辑删除"字段,请使用固定字段名称 deleted 字段类型 datetime(-1)
5、必须拥有"创建时间"字段,请使用固定字段名称 create_time 字段类型 datetime(-1)
6、必须拥有"修改时间"字段,请使用固定字段名称 update_time 字段类型 datetime(-1)
7、必须拥有"创建人"字段,请使用固定字段名称 create_by 字段类型 varchar(256)
8、必须拥有"修改人"字段,请使用固定字段名称 update_by 字段类型 varchar(256)
上述字段,除非业务真不需要,可以考虑不拥有
数据库默认值 项目会自动检测是否包含上述字段,如果存在,会自动填充,研发人员不需要有刻意想法去改变或设定其值,可以专注定制化的业务开发
1、api的接口请使用codex文档工具暴露api文档,具体使用方式,类似swagger,项目中已经集成
2、请使用validate验证注解维护入参内容的正确性
3、Controller中的RequestParams和RequestBody,不建议使用Map对象接入参数,会造成入参内容不明确,除了开发人自己,谁也不明白约定了啥
3、Controller中的ResponseBody,不建议使用Map对象、或者非包装类出参数,会造成出参内容不明确、或出参结构不统一引发与上游研发人员因为接口不统一的愿意打架
注册之前,请确认Authorization的scopes是否拥有client.create,client.read作用域,且生成Authorization token时,请带上 client.create
curl --location --request POST 'http://127.0.0.1:8100/oauth2/token?grant_type=client_credentials&scope=client.create' \
--header 'Authorization: Basic Y29kZXg6Y29kZXg=' \
--header 'Cookie: JSESSIONID=6CD62AFD8914FB82D48D9534E17DA746' \
--data ''
curl --location 'http://127.0.0.1:8100/connect/register' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer eyJraWQiOiJlMWUzNTY1Ni01YzY4LTQ1N2MtYTY3Zi0xZTA0M2QwN2QwOTgiLCJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJjb2RleCIsImF1ZCI6ImNvZGV4IiwibmJmIjoxNjgyNDA0NDczLCJzY29wZSI6WyJjbGllbnQuY3JlYXRlIl0sImlzcyI6Imh0dHA6Ly8xMjcuMC4wLjE6ODEwMCIsImV4cCI6MTY4MjQwNDc3MywiaWF0IjoxNjgyNDA0NDczfQ.CEJpHjsAGGNhF91rk04BsWTVZ0AzV9E5MUUMl1IBXWr1xkwiBcD1eDEw5wu4ce77LStWr6wFNnwv7EC4-BVImaZfig6nN2WZXVlMNxenNMxAiWdQxJhSwRe_HWGwkOTMISDiCOpXWy7yhP0kONld57UgghlhnOg8Pf2VBCYmHXgYVX2GnzvtLlk_Qp45bDPBVGtF4j3G3E5wFVr69aNQYkUX9ltak0box_csh9pdIen6Ko4idA_jERJooQwX71UBXFdyM76HtkHfM2mlPqSWYdgmD6lV-err5O_b1rXVTxZPK406V88eW-r4DZpYEvivnBsJIKFwfCUGxWgkkMpgWA' \
--header 'Cookie: JSESSIONID=A6C8A99A67D306E19B8A559AABD6FF0D' \
--data '{
"application_type": "refresh_token,client_credentials,authorization_code",
"redirect_uris": [
"http://127.0.0.1:8000/test"
],
"scope":"all"
}
'请求示例:
curl --location --request POST 'http://127.0.0.1:8100/oauth2/token?grant_type=client_credentials' \
--header 'Authorization: Basic Y29kZXg6Y29kZXg=' \
--header 'Cookie: JSESSIONID=6CD62AFD8914FB82D48D9534E17DA746' \
--data ''请求示例: 虽然Oauth2.1中不推荐使用,且Spring authorization server中已经把密码模式排除了,但为了兼容项目,考虑又在本项目中加会来了,如不需要的话,可以自行删除
curl --location --request POST 'http://127.0.0.1:8100/oauth2/token?grant_type=password&username=codex&password=123456' \
--header 'Authorization: Basic Y29kZXg6Y29kZXg=' \
--header 'Cookie: JSESSIONID=6CD62AFD8914FB82D48D9534E17DA746' \
--data ''