Skip to content

Commit 874f546

Browse files
authored
doc(java-sdk): add more description in java sdk doc (#326)
1 parent 408876e commit 874f546

File tree

2 files changed

+46
-10
lines changed

2 files changed

+46
-10
lines changed

sdk/java-sdk/README-zh.md

+40-5
Original file line numberDiff line numberDiff line change
@@ -79,24 +79,55 @@ mvn clean install
7979
* [State management](./examples/src/main/java/io/mosn/layotto/examples/state)
8080
* [Pubsub API](./examples/src/main/java/io/mosn/layotto/examples/pubsub)
8181

82-
## 如何格式化 java sdk 代码
82+
## java sdk开发指南
83+
### java sdk职责
84+
1. sdk负责对Layotto的grpc API进行封装、不应该有任何中间件的定制逻辑,比如不应该出现redis、rocketmq等产品相关的逻辑。
85+
86+
2. sdk需要把所有跟通信协议相关的东西(比如proto编译出来的stub类)屏蔽掉,请勿让public方法暴露出任何跟协议相关的东西,最好protected方法也不暴露proto相关的东西。
87+
这么做是因为将来可能改grpc API的package路径,甚至哪天不用grpc了(谁知道呢)。总之请让用户不用关心协议。
88+
89+
举个例子, state API对应有个`deleteState`方法,需要传`DeleteStateRequest`对象。
90+
```java
91+
92+
/**
93+
* Delete a state.
94+
*
95+
* @param request Request to delete a state.
96+
*/
97+
void deleteState(DeleteStateRequest request);
98+
99+
```
100+
这个`DeleteStateRequest`是sdk定义的,其实sdk会把它转成 `RuntimeProto.DeleteStateRequest` (proto编译出来的类) 。
101+
102+
你可能会问:为什么不能直接传`RuntimeProto.DeleteStateRequest` 呢?
103+
104+
这就是上面说的原因,sdk需要封装掉协议相关的东西
105+
106+
### 想为某个grpc API提供java sdk,需要做哪些事情?
107+
举个例子,grpc API里添加了file API,现在想为java sdk开发file API相关功能,需要做哪些事情?
108+
109+
1. 先找个java sdk的demo跑起来,然后看懂java sdk是怎么创建对象、怎么调用的。其实java sdk就是把grpc包了一层,封装掉grpc的一些stub类,逻辑不多。
110+
111+
2. 参考pr [feat(java-sdk): java sdk support File API](https://github.com/mosn/layotto/pull/325) . 这个pr 给java sdk添加了file API相关功能
112+
113+
### 如何格式化 java sdk 代码
83114
提交pull request之前先用maven编译一下
84115

85116
```shell
86117
mvn clean compile
87118
```
88119
会自动格式化您的代码
89120

90-
## 如何将proto文件编译成java代码
121+
### 如何将proto文件编译成java代码
91122

92-
### 1. 下载编译工具 [protoc](https://github.com/protocolbuffers/protobuf/releases)
123+
#### 1. 下载编译工具 [protoc](https://github.com/protocolbuffers/protobuf/releases)
93124
my protoc version:
94125
```shell
95126
$ protoc --version
96127
libprotoc 3.11.2
97128
```
98129

99-
### 2. 修改对应`proto`文件生成类名包名等信息
130+
#### 2. 修改对应`proto`文件生成类名包名等信息
100131
(需先修改文件内部service名)
101132
`spec/proto/runtime/v1/appcallback.proto` :
102133
```protobuf
@@ -109,11 +140,15 @@ option java_outer_classname = "RuntimeProto";
109140
option java_package = "spec.proto.runtime.v1";
110141
```
111142

112-
### 3. 编译其对应`JAVA`文件
143+
#### 3. 编译其对应`JAVA`文件
113144
```shell
114145
cd ${your PROJECT path}/spec/proto/runtime/v1
115146
protoc -I=. --java_out=../../../../sdk/java-sdk/sdk/src/main/java/ runtime.proto
116147
protoc -I=. --java_out=../../../../sdk/java-sdk/sdk/src/main/java/ appcallback.proto
117148
```
118149

119150
PS: 建议用maven插件`protoc-gen-grpc-java`生成protobuf和grpc的java代码
151+
152+
如果您在使用 [IntelliJ IDEA](https://www.jetbrains.com/help/idea/discover-intellij-idea.html) ,双击 Maven插件中的 `compile` , IDE 会自动帮你编译 proto 文件:
153+
154+
![img.png](../../docs/img/sdk/img.png)

sdk/java-sdk/README.md

+6-5
Original file line numberDiff line numberDiff line change
@@ -50,24 +50,25 @@ Try the following examples to learn more about this SDK:
5050
* [State management](./examples/src/main/java/io/mosn/layotto/examples/state)
5151
* [Pubsub API](./examples/src/main/java/io/mosn/layotto/examples/pubsub)
5252

53-
## How to format java sdk code
53+
## java sdk developer guide
54+
### How to format java sdk code
5455
Compile before submit your pull request:
5556

5657
```shell
5758
mvn clean compile
5859
```
5960
It will format your code automatically.
6061

61-
## How to generate a Java PROTO file
62+
### How to generate a Java PROTO file
6263

63-
### 1. Download proto compiler [protoc](https://github.com/protocolbuffers/protobuf/releases)
64+
#### 1. Download proto compiler [protoc](https://github.com/protocolbuffers/protobuf/releases)
6465
my protoc version:
6566
```shell
6667
$ protoc --version
6768
libprotoc 3.11.2
6869
```
6970

70-
### 2. Check `option` fields in these proto files
71+
#### 2. Check `option` fields in these proto files
7172
Make sure these `option` fields have been configurated.
7273

7374
spec/proto/runtime/v1/appcallback.proto :
@@ -82,7 +83,7 @@ option java_outer_classname = "RuntimeProto";
8283
option java_package = "spec.proto.runtime.v1";
8384
```
8485

85-
### 3. Compile them into corresponding `JAVA` files
86+
#### 3. Compile them into corresponding `JAVA` files
8687
```shell
8788
# make sure you replace this `${your PROJECT path}` with your own project path.
8889
cd ${your PROJECT path}/spec/proto/runtime/v1

0 commit comments

Comments
 (0)