Dus*_*tin 5 java protocol-buffers kotlin grpc
我正在实现一个 API,它使用Field Mask类型的update_mask来指定应在资源上更新的字段。
该 API 类似于:
rpc UpdateBook(UpdateBookRequest) returns (Book)
message UpdateBookRequest {
Book book=1;
google.protobuf.FieldMask update_mask = 2;
}
Run Code Online (Sandbox Code Playgroud)
目前代码看起来像这样:
override suspend fun updateBook(request: UpdateBookRequest): Book {
if (!FieldMaskUtil.isValid(Book::class.java, request.updateMask)) {
throwStatusRuntimeException {
code = Code.INVALID_ARGUMENT_VALUE
message = "Invalid field mask"
}
}
request.book.let { book ->
request.updateMask.pathsList.let { updateMask ->
var displayName: BookDisplayNameValue? = null
var description: BookDescriptionValue? = null
if (updateMask.contains(BookFields.DISPLAY_NAME_FIELD)) {
displayName = BookDisplayNameValue(book.displayName)
}
if (updateMask.contains(BookFields.DESCRIPTION_FIELD)) {
description = BookDescriptionValue(book.description.ifBlank { null })
}
bookService.update(
bookId = BookIdValue(book.name),
displayName = displayName,
description = description,
)
}
}
//...
}
Run Code Online (Sandbox Code Playgroud)
尽管它有效,但随着添加更多字段,维护工作非常糟糕。
是否有关于如何在服务器(Kotlin + Spring 框架 + GRPC)上实现此行为的最佳实践,可以减少样板文件的数量。
| 归档时间: |
|
| 查看次数: |
2301 次 |
| 最近记录: |