php | динамический вызов API

Я пытаюсь создать динамическую конечную точку для API, который я создаю, чтобы включить некоторые данные, но только если это необходимо, чтобы я мог использовать их в нескольких местах.

Идея состоит в том, чтобы иметь api.domain.com/vehicle вернуть основную информацию об автомобиле, но если бы я сделал api.domain.com/vehicle?with=owners,history тогда идея состоит в том, чтобы иметь функцию, которая отображает owners а также history к классу, который будет возвращать данные, но только если это требуется.

Это то, что у меня сейчас есть.

public static function vehicle()
{
$with = isset($_GET['with']) ? $_GET['with'] : null;
$properties = explode(',', $with);
$result = ['vehicle' => Vehicle::data($id)];

foreach ($properties as $property) {
array_push($result, static::getPropertyResponse($property));
}

echo json_encode($result);
}

Который затем будет вызывать эту функцию.

protected static function getPropertyResponse($property)
{
$propertyMap = [
'owners' => Vehicle::owner($id),
'history' => Vehicle::history($id)
];

if (array_key_exists($property, $propertyMap)) {
return $propertyMap[$property];
}

return null;
}

Однако ответ, который я получаю, вложен в индекс, чего я не хочу. Формат, который я хочу, это …

{
"vehicle": {
"make": "vehicle make"},
"owners": {
"name": "owner name"},
"history": {
"year": "26/01/2018"}
}

Но формат, который я получаю, это …

{
"vehicle": {
"make": "vehicle make"},
"0": {
"owners": {
"name": "owner name"}
},
"1": {
"history": {
"year": "26/01/2018"}
}
}

Как бы я сделал это, чтобы он не вернулся с индексом?

1

Решение

Vehicle::history($id) кажется, чтобы вернуться ['history'=>['year' => '26/01/2018']], …так далее.

foreach ($properties as $property) {
$out = static::getPropertyResponse($property) ;
$result[$property] = $out[$property] ;
}

Или ваши методы должны возвращать что-то вроде ['year' => '26/01/2018'] и использовать:

foreach ($properties as $property) {
$result[$property] = static::getPropertyResponse($property) ;
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]