对于某些应用程序,可能需要第三方服务或API提取某些数据,将该数据转换为所需的响应,并将其传递给客户端界面。为此,我们需要找到一种方法来保持从控制器发送到视图或最终用户界面的数据一致。因此,可能需要构造一个新的对象或类来表示应用程序中所需的资源。您可能会想“我为什么需要它?”,因为,您不想在应用程序中公开所有API响应数据,此外,您可能需要转换响应的某些字段等。在本文中,我将向您展示一种简单的方法,可以将来自第三方API的传入数据转换为应用程序中的资源,以帮助您保持一致性。在继续之前:在这篇文章中,我假设您至少有一个基本的了解API是什么以及如何使用它,如何使用Laravel框架及其一些组件作为EloquentORM。如果你不知道上面的文章是关于什么的,你可能会发现一些概念具有挑战性,但是嘿,不要气馁,我相信你会发现这篇文章对你有一定的价值。Laravel5.5中引入了一些关于“Laravel资源”“API资源”的新闻,作为一种“表达和轻松转换你的”的方式模型和模型集合转换为JSON数据格式”。虽然这是官方描述,但您会发现此部分未被官方网站的Eloquent文档中的此目录索引,您必须知道这些资源并非严格附属于EloquentORM。在最基本的意义上,Eloquent允许您将给定的对象转换为不同的对象。$this->id,'name'=>$this->name,'email'=>$this->email,'created_at'=>$this->created_at,'updated_at'=>$this->updated_at,];}}你可以通过阅读官方文档了解所有关于Resources的知识:Eloquent:APIResourcesUsingThird-PartyAPIs在使用第三方API时,你需要找到一种方法将传入的响应数据转换为具有一致结构的数据。关于Laravel的最新消息:前段时间EricL.Barnes发表了一篇文章,描述了他如何使用Laravel为laravel-news站点构建前端,然后使用WordPress作为后端并从WordPressAPI读取数据。您可以单击此处查看所有文章。https://laravel-news.com/word...那么,以一个具体案例为例。假设您的应用程序中有一个WordPress存储库,它从WordPressAPI中提取数据。apiClient->get('post',$query=['id'=>$id]);//以数组形式返回returnjson_decode($response,true);}}假设您从WordPressAPI//wordpressversion0.1{ID:123post_title:"sometitle"post_content:"somecontent",post_author:"joe",publish_date:"01-01-2001"}您可以将此响应包装到一个数组中,并在所有控制器或视图上使用此数据。响应格式一致性想想如果WordPressAPI更新了怎么办。假设新版本以不同的格式返回数据。//wordpressversion0.1{post_id:123title:"sometitle"content:"somecontent",author:"joe",date:"01-01-2001"}然后需要在项目的多个位置放$post['post_title']被$post['title']取代。使用中间件处理响应数据保证了数据库的一致性。当响应的格式增加时,你只需要更新某一段代码。使用API资源批处理数据正如我之前提到的,您可以在没有Eloquent的情况下使用“资源”,这是一个很好的例子。您需要做的第一件事是创建一个新的“Post”资源;使用工匠:$phpartisanmake:resourcePost$this->resource['title'],'content'=>$this->resource['content'],'slug'=>$this->resource['slug']];}}返回单个资源实例你现在可以参考同一个例子,在你的API容器类中,你可以创建这个资源的新实例,然后使用resolve()方法返回转换后的对象(这将返回数组)。apiClient->get('post',$query=['id'=>$id]);$data=json_decode($response,true);返回Post::make($data)->resolve();}}返回数据集合我们可以创建一个专用的资源类“PostCollection”。$phpartisanmake:resourcePostCollection$this->collection->map->toArray($request)->all(),'links'=>['self'=>'link-value',],];在上面的示例中,数据将包含一个Posts数组,其结构与您在Post资源中定义的结构相同。您可以在此处了解有关“资源集合”的更多信息。API资源汇总!因此,如果您仔细查看“资源”的定义。您可以将其视为将现有数据转换为新的、不同格式的对象或数组的中间件。更多翻译文章请查看PHP/Laravel开发者社区https://laravel-china.org/top...
