Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP REST API中转换响应和请求_Php_Json_Algorithm_Rest - Fatal编程技术网

在PHP REST API中转换响应和请求

在PHP REST API中转换响应和请求,php,json,algorithm,rest,Php,Json,Algorithm,Rest,我仍然在为如何正确地翻译PHP REST API的响应和请求而苦苦挣扎。我从RESTAPI获得了以下数组 [{ "id": "49557a36-028b-40c6-b2d8-8095468af130", "startDate": "2020-04-15T06:00:00Z", "endDate": "2020-04-15T10:00:00Z", "bookedOn": "0001-01-01T00:00:00", "doctorNotes": "", "firstVisi

我仍然在为如何正确地翻译PHP REST API的响应和请求而苦苦挣扎。我从RESTAPI获得了以下数组

[{
  "id": "49557a36-028b-40c6-b2d8-8095468af130",
  "startDate": "2020-04-15T06:00:00Z",
  "endDate": "2020-04-15T10:00:00Z",
  "bookedOn": "0001-01-01T00:00:00",
  "doctorNotes": "",
  "firstVisit": true,
  "visitReasonID": "",
  "patient": {
    "firstName": "",
    "lastName": "",
    "birthday": "0001-01-01T00:00:00",
    "gender": "x",
    "street": "",
    "postboxNumber": "",
    "city": "",
    "zip": "",
    "country": "",
    "email": "",
    "telephone": "",
    "info": ""
  }]
另一方面,我也有一些数据发送到RESTAPI,它是这样的

array(8) {
  ["GUID"]=>
  NULL
  ["datumzeit_from"]=>
  string(19) "2020-03-13 13:30:00"
  ["datumzeit_till"]=>
  string(16) "2020/03/13 17:00"
  ["titel"]=>
  string(2) "61"
  ["beschreibung"]=>
  string(4) "okay"
  ["firstVisit"]=>
  bool(true)
  ["patient"]=>
  array(1) {
    [0]=>
    array(11) {
      ["vorname"]=>
      string(4) "John"
      ["nachname"]=>
      string(7) "Daniels"
      ["geburtsdatum"]=>
      string(10) "1970-01-01"
      ["titel"]=>
      string(4) "Herr"
      ["strasse"]=>
      string(15) "Danielstraße 3"
      ["ort"]=>
      string(6) "Conan"
      ["plz"]=>
      string(5) "93085"
      ["land"]=>
      string(2) "DE"
      ["email"]=>
      string(1) "1"
      ["telnr"]=>
      string(10) "0835597839"
      ["referenz"]=>
      string(3) "nothing"
    }
  }
  ["last_updated"]=>
  string(19) "2020-03-09 17:08:23"
}
为了正确转换,我创建了一个exchange数组,如下所示:

<?php $exchangeArray = array( 
    "id" => "GUID",
    "startDate" => "datumzeit_from",
    "endDate" => "datumzeit_till", 
    "bookedOn" => "last_updated", 
    "doctorNotes" => "beschreibung",
    "firstVisit" => "firstVisit",
    //"visitReasonName" => "titel",
    "visitReasonID" => "visitreason_nr",
    "patient" => array(
        "firstName" => "vorname",
        "lastName" => "nachname",
        "birthday" => "geburtsdatum",
        "gender" => "titel", //anders
        "street" => "strasse",
        //"postboxnumber" => "",
        "city" => "ort", // ort id
        "zip" => "plz",
        "country" => "land", 
        "email" => "email",
        "telephone" => "telnr",
        "info" => "referenz"),
); ?>

它在数组上循环,并根据$stat将它们转换为请求或响应,但它不能正确转换,仍然存在许多问题,我以前只有一个函数,$stat=IN工作得非常好,但是一旦我创建了更多的函数来减少代码,它就开始出现问题,$stat=OUT在正确翻译方面也有一些逻辑问题,有人知道下面代码中的主要问题是什么吗?

我经常遇到这样的情况,即我需要将模型A转换为模型B,而不考虑转换

我发现不创建自动翻译的配置+系统几乎总是比较容易的。尽管需要更多的键入,但仅为每种情况创建一个函数有一些优点:

更容易看到发生了什么 简单代码 并不是每个转换都很容易表达。这可能会让你的“转换系统”随着时间的推移变得越来越复杂,这会让你非常痛苦。如果您只是编写代码,配置可能在某一点上与之竞争。正如您所看到的,它已经相当复杂且难以调试。 如果是我,我会为每种情况编写小的转换函数:

function toGerman($input) {

  return [
    "datumzeit_from" => $input['startDate'],
    // every other property
  ];

}
我注意到,编写函数而不是配置+映射系统违背了许多开发人员的本性,但很容易看出这是多么容易和灵活。它只是PHP!您可以使用循环和处理奇怪的边缘情况。相反,你写了一个小小的transpiler


不幸的是,你可能不认为这是你的问题的真正答案,如果是这样的话,我很乐意删除这个答案。

< P>我经常遇到一些情况,我需要把一些东西从A模型转换成B模型,不管翻译。 我发现不创建自动翻译的配置+系统几乎总是比较容易的。尽管需要更多的键入,但仅为每种情况创建一个函数有一些优点:

更容易看到发生了什么 简单代码 并不是每个转换都很容易表达。这可能会让你的“转换系统”随着时间的推移变得越来越复杂,这会让你非常痛苦。如果您只是编写代码,配置可能在某一点上与之竞争。正如您所看到的,它已经相当复杂且难以调试。 如果是我,我会为每种情况编写小的转换函数:

function toGerman($input) {

  return [
    "datumzeit_from" => $input['startDate'],
    // every other property
  ];

}
我注意到,编写函数而不是配置+映射系统违背了许多开发人员的本性,但很容易看出这是多么容易和灵活。它只是PHP!您可以使用循环和处理奇怪的边缘情况。相反,你写了一个小小的transpiler


遗憾的是,你可能不认为这是你的问题的真正答案,如果是这样的话,我很乐意删除这个答案。

< P>我认为有一个更简单的方式

1创建一个函数,将德语=>英语转换为英语=>德语

2用翻译版本更换钥匙

此函数将获取数据库输出或api输出以及早期代码中的$exchangeArray。$flip变量用于将德语转换回英语

注意,您将需要对$api\u输出进行json\u解码,并将api输出设置为true以将其转换为关联数组。您给出的示例是一个数据数组,因此需要对其进行循环:

3处理您的数据


我认为有一个稍微简单一点的方法

1创建一个函数,将德语=>英语转换为英语=>德语

2用翻译版本更换钥匙

此函数将获取数据库输出或api输出以及早期代码中的$exchangeArray。$flip变量用于将德语转换回英语

注意,您将需要对$api\u输出进行json\u解码,并将api输出设置为true以将其转换为关联数组。您给出的示例是一个数据数组,因此需要对其进行循环:

3处理您的数据


注:我也喜欢@Evert-answer-belowNice solution=经过测试、形状良好且不太复杂的解决方案的简单性。注:我也喜欢@Evert-answer-belowNice solution=经过测试、形状良好且不太复杂的解决方案的简单性。我喜欢这个解决方案,但也提供了上述代码答案,以防万一。这是一个很好的例子,它解决了属性的可扩展转换问题,对于我来说,这只是一段动态的、独特的代码,一旦转换完成,它将保持不变working@Sparkm4n名人遗言=我喜欢这个解决方案,但上面也提供了一个代码答案,以防万一,这是一个很好的例子,解决了一个总是可展开的问题
在我的例子中,属性的le翻译只是一段动态的、独特的代码,一旦完成,它将保持不变working@Sparkm4n著名的遗言=
function array_flip_recursive($array) {

    $out = [];

    foreach ($array as $k => $v) {

        if (is_array($v)) {

            $out[$k] = array_flip_recursive($v);

        } else {

            $out[$v] = $k;

        }

    }

    return $out;

}
function translate($data, $dictionary, $flip = false) {

    if ($flip) $dictionary = array_flip_recursive($dictionary);

    $out = [];

    foreach ($data as $k => $v) {

        if (is_array($v)) {

            $out[$k] = translate($v, $dictionary[$k], $flip);

        } else {

            $out[$dictionary[$k]] = $v;

        }

    }

    return $out;

}
//From the API
foreach(json_decode($api_output, true) as $api_data) {

    $myData[] = translate($api_data, $exchangeArray);

}

print_r($myData);

//From your database
foreach($database_output as $database_data) {

     $myData[] = translate($database_data, $exchangeArray, true);

}

print_r($myData);