代码之家  ›  专栏  ›  技术社区  ›  user8116198

php |动态api调用

  •  2
  • user8116198  · 技术社区  · 6 年前

    我正在尝试为我正在创建的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 回复  |  直到 6 年前
        1
  •  2
  •   Syscall - leaving SO... Juhzuri    6 年前

    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) ;
    }