Skip to content

Commit 7604373

Browse files
committed
modify java-code-contract Restful? and error code part
1 parent 2d727b3 commit 7604373

File tree

1 file changed

+62
-3
lines changed

1 file changed

+62
-3
lines changed

backend/java-code-contract.md

Lines changed: 62 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,75 @@
1515
### 2. 路由 Router文件
1616
- **结论**:为保证对外服务的统一管理,将具体的路由信息写在一个统一的文件中,而不是将其拆散写在控制器的每个方法声明头上
1717

18-
### 3. Restful Or Not
18+
### 3. Restful? and Error Respnses
1919
- **结论**
2020
- 拒绝Restful
2121
- 应用运行的状态码由开发人员自己制定和维护
22-
- HTTP 动词使用 GET、POST、DELETE
22+
- HTTP 动词使用 GET、POST
23+
- 业务请求参数错误也应该放到业务层而不是网络层(如下面 bing 的例子)
24+
- 错误代码/信息的目的是为了给出错误来源,最好能给出用户解决问题的方法(如下面Bing的例子)
25+
- Error Response结构
26+
27+
```javascript
28+
{
29+
"code": [success with 0, business exception starts with 1, system exception starts with 500]
30+
"message":[specificed information about the code]
31+
"data":[{data to return}]
32+
}
33+
```
34+
- **他山之石**
35+
- **Twitter**:用HTTP代码400表示所有的商业逻辑错误,同时提供错误细节
36+
37+
```javascript
38+
{
39+
"errors":
40+
[{
41+
"code":215,
42+
"message":"Bad Authentication data."
43+
}]
44+
}
45+
```
46+
- **Facebook**:用的GraphQL风格,HTTP仅仅是通讯层。错误信息包含了Exception的类型和内部调试索引
47+
48+
```javascript
49+
{
50+
"error":
51+
{
52+
"message": "Syntax error \"Field picture specified more than once. This is only possible before version 2.1\" at character 23: id,name,picture,picture",
53+
"type": "OAuthException",
54+
"code": 2500,
55+
"fbtrace_id": "xxxxxxxxxxx"
56+
}
57+
}
58+
```
59+
60+
- **Bing**HTTP仅仅是通讯层。商业逻辑错误还是用 HTTP 200 状态码。特点是给出了错误的解决答案(那个参数不对)和请求的后台URL
61+
62+
```javascript
63+
HTTP/1.1 200
64+
{
65+
"SearchResponse":
66+
{
67+
"Version":"2.2",
68+
"Query":
69+
{
70+
"SearchTerms":"api error codes"
71+
},
72+
"Errors":
73+
[{
74+
"Code":1001,
75+
"Message":"Required parameter is missing.",
76+
"Parameter":"SearchRequest.AppId",
77+
"HelpUrl":"http\u003a\u002f\u002fmsdn.microsoft.com\u002fen-us\u002flibrary\u002fdd251042.aspx"
78+
}]
79+
}
80+
}
81+
```
2382
- **主要思路**HTTP Code 用于区分网络问题和业务问题,自定义 Code 用于处理业务问题,不要使用 HTTP Code 去反映业务的运行情况,一方面其容量有限,另一方面使用其的学习成本也不低。Restful 风格的 API 虽然流行,但是要有自己的思考,其更适用于简单的场景。而商业系统开发往往是复杂的,不要开始就想着去简化,而应该从后期的管理上深入、想办法。
2483

2584
### 4. 接口与实现类命名风格
2685
- **结论**
86+
2787
- 接口名称前不加附属的字母(如接口前加 I),
2888
- 实现类后不加附属的无意义单词(如 Impl)
2989
- 实现类名相较于接口名后面可加有意义的单词,如Db
@@ -54,4 +114,3 @@
54114
- **结论**
55115
- 不要求进出都写,非常短小的的方法不用写,只要能追踪主要参数即可
56116
- 数据量太大时打印变量用Trace,数据量小用Info
57-

0 commit comments

Comments
 (0)