API 资源的用途是什么?
What is the purpose of API Resources?
我已阅读 docs 并观看了 Laracast。我仍然想知道你为什么要使用它们?
我了解到,如果您的字段名称发生变化但您希望保持一致,您可以将不同的数据映射到不同的名称 public 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 路由下那么它将 return 它作为 JSON 无论如何自动.
你自己回答问题吧。 API 资源或转换器(如 Fractal 中的那些)背后的想法是对客户端隐藏数据库字段名称。使用 return User::find(1)
你暴露了你的整个数据库结构,这在安全方面可能不是一个好主意,也不利于发布过程。如果您需要更改数据库字段名称,您也必须更改 API。使用资源,您可以在应用程序和您的消费者之间建立映射 API。
一开始似乎工作量更大,但一旦开始,您就不会再想错过了。
PHP 中没有 toArray()
方法,它被神奇地调用为 __toString()
。你必须自己写,自己调用。资源由Laravel内置,会自动解析。
我已阅读 docs 并观看了 Laracast。我仍然想知道你为什么要使用它们?
我了解到,如果您的字段名称发生变化但您希望保持一致,您可以将不同的数据映射到不同的名称 public 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 路由下那么它将 return 它作为 JSON 无论如何自动.
你自己回答问题吧。 API 资源或转换器(如 Fractal 中的那些)背后的想法是对客户端隐藏数据库字段名称。使用 return User::find(1)
你暴露了你的整个数据库结构,这在安全方面可能不是一个好主意,也不利于发布过程。如果您需要更改数据库字段名称,您也必须更改 API。使用资源,您可以在应用程序和您的消费者之间建立映射 API。
一开始似乎工作量更大,但一旦开始,您就不会再想错过了。
PHP 中没有 toArray()
方法,它被神奇地调用为 __toString()
。你必须自己写,自己调用。资源由Laravel内置,会自动解析。