在PHP REST API中转换响应和请求
我仍然在为如何正确地翻译PHP REST API的响应和请求而苦苦挣扎。我从RESTAPI获得了以下数组在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
[{
"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);