API中的HTTP状态代码是否很好?

时间:2017-06-04 08:41:48

标签: php laravel api composer-php

现在我正在使用laravel框架构建项目。我不是专业人士或其他任何人,过去我在不使用此类框架的情况下从头开始构建我的所有应用程序。

现在我正在为我的网站的某些部分实施Twitch API。在这样做的同时,我遇到了Twitch API返回http错误代码(40x)的情况,即使它提供了一个"有效的"响应。现在我使用了packagist.org上非常流行的Twitch API包。一旦收到40x错误代码,就会抛出异常,这会破坏我的应用程序。

原因是,响应请求如下所示:

$response = $this->client->send($request);

作为一种解决方法,我将其更改为:

$response = $this->client->send($request, ['http_errors' => false]);

显然我也可以使用of GuzzleHttp\Exception来处理这些错误。但是从我得到的,所有这些都必须发生在我通过composer下载的包中,这意味着一旦作者发布更新并且我运行作曲家更新,我的更改将被覆盖,我的应用程序可能会被破坏,直到我再次修复它。

我想不是每个人都熟悉Twitch API。我的问题的一个简单示例是API调用,您可以检查特定用户是否跟踪特定频道。当用户没有时,响应如下:

  

{       "错误":"未找到",       "消息":" 12345未跟随67890",       " status":404}

所以这是一个非常精细且有效的响应,很容易处理但是api不会响应200 http状态响应而是响应404 http状态代码,这将引发异常。

所以我的问题是,即使您发送和接收完美的请求,在API中返回40x状态代码是否真的很好?它不像缺少参数,ID或其他任何错误。它只是某种" bool"查询返回值可以为true或false,false表示返回40x http状态代码但仍包含有效响应。

谢谢

1 个答案:

答案 0 :(得分:1)

抛出异常的包是最好的,因为你可以简单地写" global"这些例外的处理程序,只需"显示"发送的错误,但你不应该。

您应该为Twitch API包编写API适配器并处理这些方法中的错误/异常,而不是在控制器或模型中使用Twitch包。您还应该将请求委托给专用服务器(例如Twitch)以进行排队作业。

回答你的问题:

  

API中的HTTP状态代码是否良好实践?

是的,您还想在哪里使用状态代码? API是一个完美的地方 状态代码易于比较,易于理解。发送的消息只是人类的元信息,用于理解"发生了什么事。

以下部分不在问题的范围内:

你应该从不更改包本身(测试时除外),而不是克隆/ fork包,进行所需的更改,并使用composer来加载你的版本。

<强> composer.json

"repositories": [
    {
        "type": "vcs",
        "url": "https://github.com/username/repository"
    }
],
"require": {
    .
    .
    .
    "original-repo-package": "dev-branch-form-your-repo as 1.0.0"
}