借这个课程的问答区问老师个问题,go 语言做 restful api 的 patch 更新是不是不好做?

来源:4-10 开发起一个计划总是遥遥无期,它总被一些非技术性的原因阻挠

香饽饽0

2023-04-29

因为比如有一个 结构体 Blog { title: string, content: string }
即使前端传递过来 title 没有传 content
go 这边接收时会用 零值去填充 content
没有办法去区分,用户是想更新 content 未空还是 只更新 title

写回答

1回答

Cap

2023-05-16

在RESTful API中,PATCH方法用于对资源进行部分更新。在使用Go语言实现PATCH请求时,可能会遇到一些挑战,但并不代表它难以实现。主要的问题在于如何处理部分更新,这需要一种机制来识别和处理只传递了部分字段的请求。


以下是一个简单的例子:

type UpdateUserRequest struct {
	Name  *string `json:"name"`
	Email *string `json:"email"`
}

func (h *Handler) UpdateUser(w http.ResponseWriter, r *http.Request) {
	var req UpdateUserRequest
	if err := json.NewDecoder(r.Body).Decode(&req); err != nil {
		http.Error(w, err.Error(), http.StatusBadRequest)
		return
	}

	// ...load the existing user...

	if req.Name != nil {
		user.Name = *req.Name
	}
	if req.Email != nil {
		user.Email = *req.Email
	}
	// ...save the updated user...
}


在这个例子中,我们定义了一个UpdateUserRequest结构体,其中的字段都是指针。这样,如果请求中没有提供某个字段,那么对应的指针就会是nil。在处理请求时,我们可以检查每个字段是否为nil,如果不是nil,就更新对应的字段。


这只是一个简单的例子,实际的情况可能会更复杂,例如需要处理嵌套的字段、需要进行数据验证等。所以,虽然实现PATCH请求可能需要更多的工作,但是Go语言完全可以处理这种情况。


0
1
香饽饽0
非常感谢!
2023-05-16
共1条回复

Go微服务入门到容器化实践,落地可观测微服务项目

这可能是你全面提升Go微服务能力的好机会

861 学习 · 322 问题

查看课程