Я пытаюсь создать динамическую конечную точку для 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"}
}
}
Как бы я сделал это, чтобы он не вернулся с индексом?
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) ;
}
Других решений пока нет …