使用 Laravel 进行 API 版本控制和身份验证

Posted

技术标签:

【中文标题】使用 Laravel 进行 API 版本控制和身份验证【英文标题】:API versioning and authentication using Laravel 【发布时间】:2020-04-06 19:45:03 【问题描述】:

我正在使用 Laravel 框架构建服务。我将生成一个供 AndroidiOS 应用使用的 API。同时,我将进行内部 API 调用以更新我的 html/Blade 视图(或在将来更新我的 SPA 前端)。所有 3 个客户端(webAndroidiOS)都将由我们的团队开发,因此沟通 - 很可能 - 很容易!

我搜索了很多,似乎在 API 版本控制方面有不同的方法(Best practices for API versioning? 或https://apisyouwonthate.com/blog/api-versioning-has-no-right-way)。 我的问题与其他问题的不同之处在于 API 的访问方式和访问者。我的 API 将被我们自己的应用程序(网络或移动)简单地使用。对我们 API 的调用将由我们自己的应用程序生成。任何第三方应用都不会访问此 API。

我对此有几个问题:

    在这种情况下,API 版本控制的正确方法是什么?使用 API 的开发人员将在同一个办公室,因此每次我们有重大的 API 更改时都会更新应用程序。 URI 版本控制 https://example.com/api/v1/users https://api-v1.example.com/users(作为子域) 资源版本控制(基于 MIME) 接受:application/vnd.example.v1+json 使用子域作为 API 版本控制是否有好处?从财务上讲,如果我们使用 SSL,那么我们还需要购买通配符 SSL 来容纳子域,所以 - 在我看来 - 更糟。 在决定 API 版本控制要遵循的路径之后,我们需要选择我们的用户将如何通过我们的 API 进行身份验证。使用 Laravel,您可以使用 tokenJWTPassport 等对 API 进行身份验证。我很确定我的服务不会其他服务用于身份验证,但这是否会从我的选择中删除 Passport?考虑到这一点来实施 Passport 是否有点矫枉过正?

提前谢谢你!

【问题讨论】:

【参考方案1】:

网址版本是必需的,因为例如,google play 不允许强制更新,因此会有不同版本的 android 客户端同时工作。 我创建了一个简单的包来帮助 URL 版本控制和回退。 https://github.com/mbpcoder/laravel-api-versioning

对于资源版本控制,Laravel 有一个资源对象来生成响应 最好为每个 API 版本创建一个文件夹。

如果对 API 的更改更深入,例如您需要更改数据库结构,那么我通常会去旧 API 更新它们的控制器、模型...以满足新结构。

【讨论】:

以上是关于使用 Laravel 进行 API 版本控制和身份验证的主要内容,如果未能解决你的问题,请参考以下文章

减少对外部 API 的身份验证调用(Laravel 5.6)

在 Laravel 中使用无需身份验证的 api 路由

内部请求需要 Laravel Dingo 身份验证 JWT

Laravel Api 和 Web 身份验证同时进行

Laravel 5.1 使用默认身份验证控制器和中间件尝试使用额外参数进行身份验证

通过 laravel API 使用 firebase 令牌身份验证