我正在寻找一个很好的资源,它将向我展示构建restful API的正确方法。 有趣的主题:特别是身份验证和一般安全性,性能,可伸缩性,最佳实践和其他有用的东西。
我将用PHP(Slim或Silex)构建它,在开始之前我想考虑整个设计,这样我就可以从一开始就采用正确的方法。
网络上有很多信息和帖子,但他们都采用不同的做法和方法。
是否有某种东西似乎是一种标准"在宁静的世界里?
答案 0 :(得分:7)
在宁静的世界里,有什么东西似乎是“标准”吗?
不超出使用HTTP的级别。有许多用于API数据编码的媒体类型(参见下面的超媒体),许多不同的最佳实践和大量的RFC,涵盖了使用HTTP的各个方面(例如使用OAuth2进行授权)。
以下是值得一读的资源汇编......我认为通过阅读其中一本或两本书,您将获得最大的收益。
认证资源
图书
验证
错误处理
超媒体
网址结构
部分更新
答案 1 :(得分:3)
关于PHP构建其他API的一些考虑
PHP是多年来广泛使用的技术。
但是在这段时间里,它已经显示出一些相关的问题:它成为一种可怕的技术,它的使用已经显示出一些安全漏洞,如SQL注入,缺乏集中式打包注册表,API不一致和性能低下。 对于构建REST apis,有更多现代技术,如Ruby on Rails和Django,或Node.js,它们很容易接近。使用PHP构建Rest APIS
如果在去年出现了更好的技术,你当然可以在php中构建你的api。许多公司仍然在生产环境中使用它。 您可以选择两种不同的方法来构建基础架构:
通过将一些常见操作委派给受信任的第三方编写代码,第二种方法可以节省时间并更专注于业务逻辑。
例如,您可以检查PHP应用程序中常用的这些库,以便更快地完成工作:
https://github.com/PHPAuth/PHPAuth可帮助您进行身份验证过程(另请查看https://github.com/firebase/php-jwt无状态身份验证)。
https://github.com/mongodb/mongo-php-driver(mongodb)或https://github.com/cagartner/sql-anywhere-client(SQL)您需要与数据库连接,此链接是一些帮助您完成工作的客户端库的示例
使用类似node.js
的内容Node.js是一种现代技术,旨在让人们做你将要做的事情。它速度快,可扩展(php更少),易于使用,并且拥有一个非常狂热的社区,可以编写代码并共享开源。
例如,使用http://expressjs.com/,您可以在几分钟内管理应用程序的整个路由。你用javascript写你的应用程序,所以你将不得不担心生理javascript的问题(闭包,异步调用等),但在解决了这个相当棘手的部分之后,使用node.js你将构建一个更高效的rest API和你的服务器将需要更少的CPU和电力来接受和回答请求。
答案 2 :(得分:2)
对于最佳实践,GitHub上有一个很好的指南库。您可以访问以下页面以获取更多信息:
您还可以查看Apiary来设计API:
对于身份验证,实际上最好的办法是依靠框架而不是从头开始重新实现。然而,出于学习目的,这是一个不同的情况,但是为了将其投入生产,最好的选择是使用框架提供的内容。大多数框架都有一个很好的实现,可能已经被社区随着时间的推移迭代到非常强大。像laravel这样的某些框架也为csrf(跨站点请求伪造)攻击提供了解决方案。
您可以研究的另一个有用的东西是JWT(JSON Web Token)。这是一个有用的链接,总结了为什么它如此棒:
我不知道如何从API角度研究可扩展性。对我来说,这似乎更像是一个基础设施问题。但是,通过身份验证(基于会话或令牌),可伸缩性可能会成为一个问题,例如,如果您为用户提供了不同数量的实例,则需要维护存储在快速访问键值存储或数据库中的粘性会话或会话。
答案 3 :(得分:1)
请查看my opinionated presentation基于JSON-LD,SemWeb,Hydra Core的REST API。
答案 4 :(得分:0)
如果您不愿意阅读书籍,请在https://leanpub.com/build-apis-you-wont-hate
中查看真实世界系列中的RESTful API然后进行深入了解 构建您不会讨厌{{3}}
的API