【问题标题】:PHP curl - preparing graphql query string with variablesPHP curl - 准备带有变量的graphql查询字符串
【发布时间】:2021-02-28 12:50:57
【问题描述】:

我有这个 graphql 请求字符串:

$data_string = '{"query":"query {\n  search(input: {\n    projectId: \"'.$project_id.'\",\n    search: \"'
           .$expr.'\",\n    limit: '.$page_size.',\n    offset: '.$offset.'\n  }) {\n    total\n    result\n  }\n}"}';

接下来我想说:

$data_string = '{"query":"query {
  search(input: {
    projectId: \"'.$project_id.'\",
    search: \"'.$expr.'\",
    limit: '.$page_size.',
    offset: '.$offset.'
  }) {
    total
    result
  }
}"}';

但是,由于某种原因,它不起作用。

这是我提出请求的方式:

        $ch = curl_init($search_api_url);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
          'Content-Type: application/json',
          'Content-Length: ' . strlen($data_string))
        );

        $result = curl_exec($ch);

附:我是 PHP 新手

【问题讨论】:

  • 你想用next thing做什么?用实际的换行符替换\n?尝试创建$data_string 的数组,例如$data_string = ["query" => "graphql string content..."]; 然后json_encode($data_string)。它将减少报价维护任务
  • 输入应该通过像突变这样的变量传递...和像query search($input: API_DEFINED_SEARCH_INPUT_TYPE) { search(input: $input) { total result }这样的查询

标签: php graphql multilinestring


【解决方案1】:

感谢https://stackoverflow.com/users/6124657/xadm

这可能是在没有额外库和良好可读性的情况下发出 GraphQL 请求的最佳方式

我的代码现在看起来像这样:

$data_string = json_encode([
            "query" => "query SEARCH(\$input: SearchInput!) {
                search(input: \$input) {
                    total
                    result
                  }
                }",
            "variables" => [
                "input" => [
                    "projectId" => $project_id,
                    "search" => $expr,
                    "limit" => $page_size,
                    "offset" => $offset
                ]
            ]
        ]);
        $ch = curl_init($search_api_url);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(
          'Content-Type: application/json',
          'Content-Length: ' . strlen($data_string))
        );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-25
    • 1970-01-01
    • 2018-10-16
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多