我正在寻求有关以下计划的建议,该计划是针对我未来的某个项目。
- 大局观
- 我想生成一个移动客户端(iOS,Android,Windows Phone等),它将从我的网站查询(读/写)数据库并显示其结果。
- 加上其他几个功能...
我知道从客户端直接访问数据库(绕过 Web 服务器)是一个坏主意,尤其是在互联网上。我认为大多数共享虚拟主机计划无论如何都禁止这样做。所以这是我想要的解决方案...
- 移动客户端通过 API 调用将数据发送到 Web 服务器。
- Web 服务器处理 REST API 调用并查询数据库。Web 服务器充当移动客户端和数据库服务器之间的中间件。
- Web 服务器接收来自数据库查询的结果,并将其传递给移动客户端。
- 移动客户端在客户端显示/操作数据。
我在API方面的经验仅限于使用Twitter,Instagram和Google Shopping API。根据我的经验,最好以JSON格式在移动和Web服务器之间传输数据。
现在,这是我的担忧...
- 如何确保只有登录用户才能使用该 API?OAuth 是解决方案吗?
- 对于 REST API,如果它是 RESTful 更好吗?
该网站的当前环境是与PHP和MySQL共享托管,尽管我正在考虑将来将其转移到基于云的服务中。我计划使用 CodeIgniter 或 CakePHP 或 Apify 实现中间件。
如果有人能批评我的上述计划或提出比我脑海中更好的替代方案,我将不胜感激。
提前谢谢。
REST 可能是您正在寻找的最佳架构。你得到的休息越多越好。
OAuth 是一种授权协议,用于处理哪些网站有权使用您的凭据。授权与身份验证不同,尽管可以使用另一方的授权来确保身份验证。
OAuth 上的选择取决于您构建的服务。例如,如果你的应用程序基于 Twitter,则使用 Twitter OAuth 进行身份验证是有意义的。
如果您的服务将提供自己的凭据,并且每个用户都有自己的用户名/密码由您存储,则 OAuth 可能不是最佳选择。在此方案中,需要设置 OAuth 客户端和 OAuth 服务器,这不是必需的。
对于自己的身份验证,HTTP 摘要身份验证是一个不错的选择:它易于实现,许多库已经支持它,并且在大多数情况下都足够安全。
避免使用 PHP 中的会话和 cookie。REST 是无状态的,这些功能在服务器上充满了客户端状态。
如果有一天您需要将服务扩展到更多服务器,则在它们之间同步会话是很痛苦的。
照顾缓存标头,如 Expires
、 ETag
和 Last-Modified
。它们提高了 API 的整体性能,您可以设置一个反向代理(服务器和客户端之间的中间件)来为您缓存内容。
API 上的公共数据不应要求身份验证。缓存经过身份验证的数据时,不能在不同用户之间共享此缓存。可以共享公共数据缓存。
JSON 和 XML 都易于处理和操作。有时JSON更好,有时XML更好。有关这些格式差异的更多信息,请参阅此答案。
看看Respect''Rest,Varnish和Frapi。这些是 REST API 的好工具。