如何优化为Mobile app写的RESTful API

1. 移动应用访问的后端跟其他后端的区别

  • 使用https,每个endpoint使用同一类证书
  • Server承担大部分的计算任务
  • 请求失败要有清楚的错误码和错误信息
  • api 版本控制
  • 支持push

2.设计RESTful API时应该考虑的东西

  • 自己搭建服务器还是使用云
  • 保护数据:https,每个endpoint的访问都需要认证,加密敏感数据
  • 开发环境:development, staging,production
  • 数据库选择:MySql 最稳定,以UUID作entity id
  • 选择正确的工具: 团队交流工具,进度可见,api 文档, test suite as document。
  • 支持多种客户端:pagination of long list result, client determine the number of results, include device name, os version, os type in header

3.如何实现RESTful API

  • url 由动词和名词构成,动词是GET, POST, PUT, PATCH, DELETE, 名词就是url path,如

GET /books
POST /books
GET /books/{bookId}
PUT /books/{bookId}
PATCH /books/{bookId}
DELETE /books/{bookId}
GET /books/{bookId}/authors
GET /bookClubs/book
GET /users/{userId}
GET /users/{userId}/favoriteBooks

通过url 参数使得client可以对数据进行筛选

GET /libraries?sortBy=name&isCurrentlyOpen=true&pageCount=10
GET /books?queryTitle=Sherlock+Holmes&queryAuthor=Arthur+Conan+Doyle
GET /bookClubs?genre=mystery

在 url 加入版本控制:

GET /v1/books
GET /v2/books

request 和 response中缺失的field,不要假定为null

用response code标示请求结果

Json key保持同样的命名规则,驼峰或者下划线,不要混用

不要包装数据

GET /authors?genre=mystery

{
"data": {
[{ "authorName": "Arthur Conan Doyle",
...
}]
}
}

当返回数据只有一个时,也要返回数组

GET /authors?genre=mystery

{
"authorName": "Arthur Conan Doyle",
...
}

不要在响应中包含冗余数据

GET /authors?genre=mystery

{
"requestInfo": {
"genre": "mystery"
},
[{
"authorName": "Arthur Conan Doyle",
...
}]
}

请求和响应中的时间一律使用 ISO 8601 format with UTC values

Reference

https://savvyapps.com/blog/how-to-build-restful-api-mobile-app

你可能感兴趣的:(如何优化为Mobile app写的RESTful API)