【问题标题】:Posting Data to REST API using JSON and PHP使用 JSON 和 PHP 将数据发布到 REST API
【发布时间】:2016-02-10 18:19:11
【问题描述】:

我一直在寻找有关 REST API 的类似主题,但我的项目仍然有些困惑,主要是 PHP 方面的问题。

USPS 提供了一个 REST API,其中包含可通过 URL 调用的函数,如下所示:https://epfws.usps.gov/ws/resources/epf/login

要成功进行任何调用,我被告知必须创建一个 JSON 对象并将其作为具有预期值的“POST 参数”传递。

这是本例需要传递的 JSON 对象:

obj=
{
"login":"loginExample",
"pword":"passwordExample"
}

我还获得了一个应该管理这些调用的 PHP 类。这是登录功能:

public function login ()
{
    // Set up the parameters for a login attempt
    $jsonData = array(
        'login' => $this->loginUser,
        'pword' => $this->loginPass,
    );

    // Make a login request
    $jsonResponse = $this->pullResource
('/epf/login', 'POST', $jsonData);


    return $jsonResponse;
}

所以我对此有几个问题:

  1. 他们发送的文件说

    “为了进行请求调用,出于安全原因,需要使用内容类型“application/x-www-form-urlencoded”创建 JSON 对象并将其作为 POST 表单参数 obj={jsonObject} 传递。”

    我知道登录函数包含 USPS 的 REST API 所需的正确输入值,但我不确定如何将它们作为“obj”传递,或者如何应用“内容类型”。

  2. 我在 PHP 脚本的顶部定义了一个“常量”,如下所示:

    const EPF_BASE_URL = 'https://epfws.usps.gov/ws/resources';

    我注意到在实际函数中,这部分链接被遗漏了,它们只是引用'/epf/login',如您在上面看到的。由于 "$this" 包含许多不同的值,我想知道它应该如何根据需要找到 EPF_BASE_URL。是否类似于 C# 中“使用”指令的工作方式?

  3. 调用此函数并显示结果的最简单方法是什么?这是我最大的问题。我会使用带有 HTML 表单的单独 PHP 类吗?我理解它应该做什么的概念,但我完全迷失了为它设置开发环境。

我一直在用 MAMP 尝试所有这些,但很想知道我是否走在正确的轨道上。

【问题讨论】:

    标签: php json api rest post


    【解决方案1】:
    1. 这真的取决于他们的 API。希望你得到一个可以解码为 JSON 对象的字符串 (http://au.php.net/manual/en/function.json-decode.php)。一些 API 可能会给出一个简单的字符串,上面写着“SUCCESS”或“FAIL”。你已经得到了代码,所以看看 $this->pullResponse() 给你什么。

    如果您已经获得了一个应该支持 API 的 PHP 类(希望来自 USPS),那么它应该已经负责将数据放入表单内容中,并确保它与适当的内容一起提交 -输入。

    1. PHP const 更像是 C# static string。库很可能会使用该常量来创建结束 URL(即EPF_BASE_URL . $resource)。如果您需要在沙盒环境中运行,您可以更改该常量而无需更改所有其他代码。

    2. 这是一个非常大的问题,因为它取决于您如何编写应用程序。程序化、MVC、现有框架等

    至少,您将在实例化对象上设置loginUserloginPass,并调用login 方法`。然后,您可以检查结果,假设结果是 JSON 对象,或者使用您喜欢的调试方法查看内容。

    我猜是 USPS API 类名。

    $uspsApi = new UspsApi();
    $uspsApi->loginUser = 'username';
    $uspsApi->loginPass = 'password';
    $result = $uspsApi->login();
    echo print_r($result, true);
    

    【讨论】:

    • 鲁本,感谢您的回复,这是一个很大的帮助。那么上面的PHP数组(“$jsonData”)在调用时是否被认为是一个JSON对象,还是我需要使用“json_encode($jsonData)”?
    • 根据您给出的代码示例,$jsonData 是一个 PHP 数组。但是,我不确定pullResource() 是否真的需要 JSON 对象,因为我无权访问 API。我找到了对源 (github.com/cpapdotcom/USPSTools) 的引用。从pullResource() 在EPF.php 上其他方法中的用法来看,你可以将其保留为PHP Array,pullResource() 会将其转换为JSON 对象。
    • 此外,pullResource() 似乎返回了一个常规 PHP 数组,其中包含 requestInfo、headerParams 和 responseData 的键。
    猜你喜欢
    • 2015-10-14
    • 2015-10-08
    • 2017-01-19
    • 2018-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    相关资源
    最近更新 更多