API资源的目的是什么?

时间:2018-01-08 17:15:35

标签: laravel laravel-5 laravel-5.5

我读过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返回。

1 个答案:

答案 0 :(得分:4)

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

一开始似乎更多的工作,但一旦你开始它,你不会再想念它了。

PHP中没有toArray()方法,它被神奇地称为__toString()。你必须自己写,然后自己打电话。资源由Laravel内置,将自动解决。