如何使用Laravel 5.4从API端点检索JSON?

时间:2017-02-19 20:37:11

标签: laravel api laravel-5

我有两个用Laravel 5.4制作的项目:

  1. Prj-1它是一个返回JSON的Restful API。
  2. Prj-2它是一个消耗上述端点的网站。
  3. 通过这种方式,我有来自Prj-1的跟随端点: myAPI.com/city JSON 格式返回数据库中所有城市的列表。

    在Prj-2里面我有以下内容:

    Route:
    Route::get('/showCityAPItest','AddressController@getcity'); 
    
    Controller:
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\Route;
    ...
    public function getcity()
        {
    
    
            $request =Request::create('http://myAPI.com/city', 'GET');
            $response = Route::dispatch($request);
            dd($response);
        }
    

    如果我在浏览器中直接使用网址(http://myAPI.com/city),则可以使用。我可以按预期看到JSON。 当我尝试从Prj-2中检索它时,我无法在浏览器中看到它。

    其实我看到了

    404 Not Found
    nginx/1.10.1 (Ubuntu)
    

    我跟着这个post,但我不知道我做错了什么。

    任何帮助?

2 个答案:

答案 0 :(得分:1)

您所指的答案是谈论内部路线。您无法将RequestRoute外观用于此类外部地址。相反,使用例如Guzzle(http://docs.guzzlephp.org/en/latest/)从第二个站点发送您的请求。

答案 1 :(得分:1)

是的,@ Joel Hinz是对的。请求将在同一项目api端中工作。 您需要使用GuzzleHttp。 步骤1.使用composer安装guzzle。适用于Windows的作曲者操作基本口舌命令
    作曲家需要guzzlehttp / guzzle 步骤2编写以下代码

public function getcity()
    {     
       $client = new \GuzzleHttp\Client;
       $data =$client->request('GET', 'http://myAPI.com/city', [
       'headers' => [
           'Accept'     => 'application/json',
           'Content-type' => 'application/json'
       ]
       ]);

       $x = json_decode($data->getBody()->getContents());
       return response()->json(['msg' => $x], 200);
}