首先我们打开请求的body。 注意我们使用io.LimitReader。这样是保护服务器免受恶意攻击的好方法。假设如果有人想要给你服务器发送500GB的JSON怎么办?
我们读取body以后,我们解构Todo结构体。 如果失败,我们作出正确的响应,使用恰当的响应码422, 但是我们依然使用json响应回去。 这样可以允许客户端理解有错发生了, 而且有办法知道到底发生了什么错误。
最后,如果所有都通过了,我们就响应201状态码,表示请求创建的实体已经成功创建了。 我们同样还是响应回代表我们创建的实体的json, 它会包含一个id, 客户端可能接下来需要用到它。
POST一些JSON
我们现在有了伪repo, 也有了create路由,那么我们需要post一些数据。 我们使用curl通过下面的命令来达到这个目的:
curl -H "Content-Type: application/json" -d '{"name": "New Todo"}' http://localhost:8080/todos
如果你再次通过http://localhost:8080/todos访问,大概会得到下面的响应:
[
{
"id": 1,
"name": "Write presentation",
"completed": false,
"due": "0001-01-01T00:00:00Z"
},
{
"id": 2,
"name": "Host meetup",
"completed": false,
"due": "0001-01-01T00:00:00Z"
},
{
"id": 3,
"name": "New Todo",
"completed": false,
"due": "0001-01-01T00:00:00Z"
}
]
我们还没有做的事情
虽然我们已经有了很好的开端,但是还有很多事情没有做:
-
版本控制: 如果我们需要修改API, 结果完全改变了怎么办? 可能我们需要在我们的路由开头加上/v1/prefix?
授权: 除非这些都是公开/免费API, 我们可能还需要授权。 建议学习JSON web tokens的东西。
eTag - 如果你正在构建一些需要扩展的东西,你可能需要实现eTag。
还有什么?
对于所有项目来说,开始都很小,但是很快就变得失控了。但是如果我们想要将它带到另外一个层次, 让他生产就绪, 还有一些额外的事情需要做:
-
大量重构(refactoring).
为这些文件创建几个包,例如一些JSON助手、修饰符、处理器等等。
测试, 使得,你不能忘记这点。这里我们没有做任何测试。对于生产系统来说,测试是必须的。
源代码:https://github.com/corylanou/tns-restful-json-api
总结
对我来说,最重要的,需要记住的是我们要建立一个负责任的API。 发送适当的状态码,header等,这些是API广泛采用的关键。我希望本文能让你尽快开始自己的API。
参考链接
Go语言RESTful JSON API实现
JSON API
Gorilla Web Toolkit
httprouter
JSON Web Tokens
eTag
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易采站长站。









