API资源的目的是什么?

pan*_*hro 5 laravel laravel-5 laravel-5.5

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

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

如果我要这样做:

return User::find(1);
Run Code Online (Sandbox Code Playgroud)

我得到的答复是:

{"id":1,"name":"Ova Parker"}
Run Code Online (Sandbox Code Playgroud)

如果我做:

return new UserResource(User::find(1));
Run Code Online (Sandbox Code Playgroud)

我得到的答复是:

{"data":{"id":1,"name":"Ova Parker"}}
Run Code Online (Sandbox Code Playgroud)

用数据标签包装是否有意义?我只是在猜测,但这是API的标准JSON格式吗?您为什么不只是return User::find(1);使用API​​资源而不是这样做,如果它在API路由下,那么它将自动以JSON形式返回。

com*_*nse 6

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

一开始似乎需要更多的工作,但是一旦开始,您就再也不想错过了。

toArray()PHP 中没有方法可以像__toString(). 您必须自己编写并自己调用它。资源是 Laravel 内置的,会自动解析。