【问题标题】:What is the purpose of API Resources?API 资源的用途是什么?
【发布时间】:2018-01-09 04:36:04
【问题描述】:

我已经阅读了docs 并观看了 Laracast。我仍然想知道您为什么要使用它们?

如果您的字段名称要更改但您希望保持一致的公共 API,您可以将不同的数据映射到不同的名称。但是你可以用 toArray() 方法在模型上做同样的事情并在那里改变映射吗?

如果我这样做:

return User::find(1);

我收到如下回复:

{"id":1,"name":"Ova Parker"}

如果我这样做:

return new UserResource(User::find(1));

我收到如下回复:

{"data":{"id":1,"name":"Ova Parker"}}

用数据标签包装它有什么意义吗?我只是在猜测,但这是 API 的标准 JSON 格式吗?为什么不直接使用return User::find(1); 而不是使用 API 资源,如果这是在 API 路由下,那么无论如何它都会自动将其作为 JSON 返回。

【问题讨论】:

    标签: laravel laravel-5 laravel-5.5


    【解决方案1】:

    您可以自己回答问题。 API Resources 或 Transformers(如 Fractal 中的那些)背后的想法是对客户端隐藏 db 字段名称。使用return User::find(1),您会暴露整个数据库结构,这在安全方面可能不是一个好主意,而且对发布过程也不利。如果您需要更改数据库字段名称,您也必须更改 API。使用 Resources,您可以在应用程序和 API 的使用者之间建立映射。

    一开始似乎工作量更大,但一旦开始,你就不想再错过它了。

    在 PHP 中没有 toArray() 方法,它被神奇地称为 __toString()。您必须自己编写并自己调用它。资源是 Laravel 内置的,会自动解析。

    【讨论】:

    • 感谢您提供的信息 - API 资源如何在数据标签中输出数据的背后是否还有原因?而只是返回它不会。为什么这样做/这是个好主意吗?
    • 这就是 Taylor 构建它的方式。后面没有标准。您也可以删除它。见laravel.com/docs/5.5/eloquent-resources#data-wrapping
    • 感谢您的详细解答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多