【问题标题】:Good resource for building restful API构建restful API的好资源
【发布时间】:2015-05-26 23:22:20
【问题描述】:

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

我将使用 PHP(Slim 或 Silex)构建它,在开始之前,我想考虑整个设计,以便从一开始就走正确的路。

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

在宁静的世界中,有什么东西看起来像是“标准”吗?

【问题讨论】:

标签: php rest restful-authentication slim silex


【解决方案1】:

在宁静的世界中,有什么东西看起来像是“标准”吗?

不超出使用 HTTP 的水平。有许多用于 API 数据编码的媒体类型(请参阅下面的超媒体)、许多不同的最佳实践以及涵盖使用 HTTP 的各个方面的大量 RFC(例如使用 OAuth2 进行授权)。

以下是值得一读的资源汇编……我想你会从阅读一两本书中获得最大的收获。

权威资源

书籍

身份验证

错误处理

超媒体

网址结构

部分更新

【讨论】:

    【解决方案2】:

    关于 PHP 构建 REST API 的一些注意事项

    多年来,PHP 一直是一种广泛使用的技术。

    但在这段漫长的时间里,它也出现了一些相关的问题:它变成了一种可怕的技术,并且它的使用显示了一些安全漏洞,例如 SQL 注入、缺乏集中的打包注册表、不一致的 API 和低于标准的性能。 对于构建 REST api,有更现代的技术,例如 Ruby on Rails 和 Django,或 Node.js,它们很容易上手。

    使用 PHP 构建 Rest APIs

    如果去年出现了更好的技术,您当然也可以在 php 中构建您的 api。许多公司仍在生产环境中使用它。 您可以选择两种不同的方法来构建您的基础架构:

    1. 从头开始构建所有内容,直接与 PHP API 交互。
    2. 留在上层和第三方接口,打开 源库来执行一些繁琐的过程,如路由, 身份验证等。

    第二种方法通过将一些常见操作委托给受信任的第三方编写的代码,让您可以节省时间并更加专注于业务逻辑。

    例如,您可以检查 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) 您将需要与数据库交互,此链接是一些可帮助您完成工作的客户端库的示例

    使用类似 node.js 的东西

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

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

    【讨论】:

    • 这个答案中关于 PHP 的建议已经过时多年,在某些情况下完全是错误的。例如,SQL 注入可以以任何语言发生。 PHP 具有与任何其他语言一样好的防止它的工具。 PHP 有一个很棒的包管理注册表,叫做 Composer。而且,随着 PHP 5.6 的发布,性能已经达到顶峰。有许多出色的框架可用于您需要做的任何事情。在 PHP 5.4 和 Composer 之前,我可能已经同意 PHP 的这种黯淡前景,但现在它和其他任何选择一样好。
    【解决方案3】:

    对于最佳实践,GitHub 上有一个很好的指南存储库。您可以到以下页面了解更多信息:

    http-api-design

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

    Apiary

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

    您可以研究的另一个有用的东西是 JWT(JSON Web 令牌)。这是一个有用的链接,总结了它为何如此出色:

    Stateless tokens with JWT

    我不知道如何从 API 的角度来看待可扩展性。对我来说,这似乎更像是一个基础设施问题。但是,对于身份验证(基于会话或令牌)的可扩展性可能会成为一个问题,例如,如果您有不同数量的实例为您的用户提供服务,您需要维护粘性会话或存储在快速访问键值存储或数据库中的会话。

    【讨论】:

      【解决方案4】:

      请查看my opinionated presentation,了解基于 JSON-LD、SemWeb、Hydra Core 的 REST API。

      【讨论】:

        猜你喜欢
        • 2013-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多