构建restful API的良好资源

时间:2015-03-05 11:48:48

标签: php rest restful-authentication slim silex

我正在寻找一个很好的资源,它将向我展示构建restful API的正确方法。 有趣的主题:特别是身份验证和一般安全性,性能,可伸缩性,最佳实践和其他有用的东西。

我将用PHP(Slim或Silex)构建它,在开始之前我想考虑整个设计,这样我就可以从一开始就采用正确的方法。

网络上有很多信息和帖子,但他们都采用不同的做法和方法。

是否有某种东西似乎是一种标准"在宁静的世界里?

5 个答案:

答案 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。许多公司仍然在生产环境中使用它。 您可以选择两种不同的方法来构建基础架构:

  1. 从头开始构建一切直接与PHP API接口。
  2. 保持在较高级别并与第三方接口,打开 源库执行一些繁琐的过程,如路由, 身份验证等。
  3. 通过将一些常见操作委派给受信任的第三方编写代码,第二种方法可以节省时间并更专注于业务逻辑。

    例如,您可以检查PHP应用程序中常用的这些库,以便更快地完成工作:

    1. https://github.com/chriso/klein.php可帮助您执行路由
    2. https://github.com/PHPAuth/PHPAuth可帮助您进行身份验证过程(另请查看https://github.com/firebase/php-jwt无状态身份验证)。

    3. https://github.com/mongodb/mongo-php-driver(mongodb)或https://github.com/cagartner/sql-anywhere-client(SQL)您需要与数据库连接,此链接是一些帮助您完成工作的客户端库的示例

    4. 使用类似node.js

      的内容

      Node.js是一种现代技术,旨在让人们做你将要做的事情。它速度快,可扩展(php更少),易于使用,并且拥有一个非常狂热的社区,可以编写代码并共享开源。

      例如,使用http://expressjs.com/,您可以在几分钟内管理应用程序的整个路由。你用javascript写你的应用程序,所以你将不得不担心生理javascript的问题(闭包,异步调用等),但在解决了这个相当棘手的部分之后,使用node.js你将构建一个更高效的rest API和你的服务器将需要更少的CPU和电力来接受和回答请求。

答案 2 :(得分:2)

对于最佳实践,GitHub上有一个很好的指南库。您可以访问以下页面以获取更多信息:

http-api-design

您还可以查看Apiary来设计API:

Apiary

对于身份验证,实际上最好的办法是依靠框架而不是从头开始重新实现。然而,出于学习目的,这是一个不同的情况,但是为了将其投入生产,最好的选择是使用框架提供的内容。大多数框架都有一个很好的实现,可能已经被社区随着时间的推移迭代到非常强大。像laravel这样的某些框架也为csrf(跨站点请求伪造)攻击提供了解决方案。

您可以研究的另一个有用的东西是JWT(JSON Web Token)。这是一个有用的链接,总结了为什么它如此棒:

Stateless tokens with JWT

我不知道如何从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