资讯专栏INFORMATION COLUMN

利用 Laravel Resources 来整合第三方 API 数据

Jonathan Shieber / 1623人阅读

摘要:对于某些应用程序,可能需要第三方服务或者来提取某些数据,将该数据转换为所需的响应,并将其传送到客户端界面。使用中间件来处理响应数据可以确保数据库的一致性。

对于某些应用程序,可能需要第三方服务或者 API 来提取某些数据,将该数据转换为所需的响应,并将其传送到客户端界面。

为此,我们需要找到一种方法,方便从控制器发送到视图或最终用户界面的数据保持一致性。

因此,可能需要构建一个代表应用程序中所需资源的新对象或类。

您或许可能会想『为什么我需要它?』,因为,您不希望在应用程序中公开所有的 API 响应数据,此外,你可能需要转换该响应的某些字段等。

在本文中,我将向您展示一种简单的方法,将来自第三方 API 传入的数据转换为应用程序中的资源,以帮您保持一致性。

在进一步讨论之前:在这篇文章中,我假设您至少已经基本了解了什么是 API 以及该如何使用 API ,如何使用 Laravel 框架及其某些组件作为 Eloquent ORM 。 如果你不知道上面的文章大概在说明写什么,你可能会发现一些挑战性的概念,但是,嘿,不要气馁,我相信你会发现这篇文章会给你带来一定的价值。
一些关于 "Laravel resources" 的消息

"API Resources" 在 Laravel 5.5 中引入,作为是“将您的模型和模型集合表达并轻松转换为 JSON 数据格式”的一种方式。

虽然这是官方的说明,并且您发现此部分在官方网站的 Eloquent 文档上没有此目录索引,但您必须知道这些资源并未严格附加到 Eloquent ORM 当中。

在最基本的意义上来说,Eloquent 允许您将给指定对象转换为不同的对象。

 $this->id,
            "name" => $this->name,
            "email" => $this->email,
            "created_at" => $this->created_at,
            "updated_at" => $this->updated_at,
        ];
    }
}

您可以通过阅读官方文档了解有关 Resources 的所有信息:Eloquent: API Resources

使用第三方 API

在使用第三方 API 时,您需要找到一种方法将传入的响应数据转换为结构一致的数据。

有关 Laravel 的最新消息:不久前 Eric L. Barnes 发表了一篇文章,描述了他如何使用 Laravel 为 laravel-news 网站建立一个前端页面,然后用 WordPress  作为后端并从 WordPress API 读取数据。你可以点击这里查看所有文章。 https://laravel-news.com/word...

因此,以具体案例为例。 假设您的应用程序中有一个 WordPress 存储库,它从 WordPress API 中提取数据。

apiClient->get(
            "post",
             $query = ["id" => $id]
        );
        // return as array
        return json_decode($response, true);
    }
}

假设您从 WordPress API 接收此对象(数据)

// wordpress version 0.1
{
    ID: 123
    post_title: "some title"
    post_content: "some content",
    post_author: "joe",
    publish_date: "01-01-2001"
}

您可以将此响应包装到一个数组中,然后在所有控制器或视图上使用此数据。

响应格式一致性

不妨想一想,如果 WordPress 的 API 更新了怎么办。假如新版本会返回一个不同格式的数据。

// wordpress version 0.1
{
    post_id: 123
    title: "some title"
    content: "some content",
    author: "joe",
    date: "01-01-2001"
}

那么你就需要在项目的多个位置把 $post["post_title"] 替换成 $post["title"]

使用中间件来处理响应数据可以确保数据库的一致性。当响应的格式增加时,你只需要更新某段代码即可。

使用 API 资源批量处理数据

正如我之前提到的,你可以使用没有Eloquent的 「Resources」,下面就是一个很好的例子。
您需要做的第一件事是创建一个新的「Post」资源; 使用 artisan:

$ php artisan make:resource Post

 $this->resource["title"],
            "content" => $this->resource["content"],
            "slug" => $this->resource["slug"]
        ];
    }
}
返回单个资源实例

现在可以参照相同的例子,在你的 API 容器类中,你可以创建一个此资源新的实例,然后使用 resolve() 方法来返回转换后的对象(这将返回一个数组)。

apiClient->get(
            "post",
            $query = ["id" => $id]
        );
        $data = json_decode($response, true);
        return Post::make($data)->resolve();
    }
}
返回数据集合

我们可以创建一个专用的资源类 「PostCollection」。

$ php artisan make:resource PostCollection

 $this->collection
                          ->map
                          ->toArray($request)
                          ->all(),
            "links" => [
               "self" => "link-value",
             ],
        ];
    }
}

在上面的例子中,data 将会包含一个 Posts 数组,该数组的结构跟你在 Post 资源中定义的一样。

你可以在这里了解更多关于 「resource collections」 的信息。

API 资源

总结!

因此,如果你仔细研究 「resources」 的定义。你可以将其视为中间件,用于将已有数据转为新的、不同格式的对象或数组。

更多翻译文章请见 PHP / Laravel 开发者社区 https://laravel-china.org/top...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30025.html

相关文章

  • Laravel学习笔记三-前端工作流

    摘要:本节将学习是如何利用形成一套完整的前端工作流模式的。你也可以使用下面命令来强制安装所有模块,不管该模块之前是否安装过由于国内墙的原因,使用安装会非常缓慢,慢到想切,不过还好,我们可以使用淘宝提供的国内镜像进行下载。 本节将学习 Laravel 是如何利用 Sass, NPM, Gulp形成一套完整的前端工作流模式的。 一、句法强大的样式表Sass Sass 是一种可用于编写CSS的语言...

    liuchengxu 评论0 收藏0
  • Laravel5.4新特性-Laravel-mix和laravel-elixir比较

    摘要:之前的版本用的管理全段资源,版本开始使用的来管理。不过,并不是强制要求在开发期间使用它。发布问题标题标题编辑器容器内容发布问题实例化编辑器设置如果没有预加载,否则不会出现 Laravel5.4 之前的版本用 gulp 的 laravel-elixir管理全段资源,Laravel5.4 版本开始使用webpack 的 Laravel Mix 来管理。 一、简介 Laravel Mix 提...

    187J3X1 评论0 收藏0
  • [译]如何基于Laravel构建Vue应用(一)

    摘要:使用能优雅的构建并且与单页面应用程序完美结合。我们将重点关注所需的所有部分,然后在后续教程中,我们将进一步演示如何使用作为层。例如,如果用户刷新路由,我们将需要匹配该路由并返回应用程序模板。运行应用程序该基础用于构建具有和路由器的。 使用Laravel能优雅的构建API并且与Vue单页面应用程序(SPA)完美结合。在本教程中,我们将展示如何启动和运行Vue路由器以及用于构建SPA的La...

    Rocko 评论0 收藏0
  • laravel开发扩展记录

    摘要:自动代码扩展开发时遵守的代码风格是项目开发规范。遵照此规范,在实际操作中,有许多重复,接下来推荐一款专为此规范量身定制的代码生成器。可以利用此扩展来快速构建项目原型。后续还会为大家带来一些最新的技术扩展。 whoops 错误提示扩展 whoops 是一个非常优秀的 PHP Debug 扩展,它能够使你在开发中快速定位出错的位置。laravel默认安装。showImg(https://s...

    fancyLuo 评论0 收藏0
  • laravel开发扩展记录

    摘要:自动代码扩展开发时遵守的代码风格是项目开发规范。遵照此规范,在实际操作中,有许多重复,接下来推荐一款专为此规范量身定制的代码生成器。可以利用此扩展来快速构建项目原型。后续还会为大家带来一些最新的技术扩展。 whoops 错误提示扩展 whoops 是一个非常优秀的 PHP Debug 扩展,它能够使你在开发中快速定位出错的位置。laravel默认安装。showImg(https://s...

    魏宪会 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<