使用json和Guzzle的Laravel5API

使用json和Guzzle的Laravel5API,laravel,rest,api,laravel-5,guzzle,Laravel,Rest,Api,Laravel 5,Guzzle,我对Laravel5还很陌生,但我正在处理涉及2台服务器(S1和S2)的项目。每个都运行一个Laravel5RESTWebService(API)WS1和WS2 工作流程如下所示: WS1:只需获得一个查询,比如1是对象的id。它只是将查询“重新路由”到WS2 WS2:使用来自Laravel/Passport的个人访问令牌获取相同类型的查询 WS2:让本地mysql数据库知道id为1的对象是否“有效” WS2:使用json创建对WS1查询的响应。比如: {“id”:“2”,“valid”:tru

我对Laravel5还很陌生,但我正在处理涉及2台服务器(S1和S2)的项目。每个都运行一个Laravel5RESTWebService(API)WS1和WS2

工作流程如下所示:

  • WS1:只需获得一个查询,比如1是对象的id。它只是将查询“重新路由”到WS2
  • WS2:使用来自Laravel/Passport的个人访问令牌获取相同类型的查询
  • WS2:让本地mysql数据库知道id为1的对象是否“有效”
  • WS2:使用json创建对WS1查询的响应。比如: {“id”:“2”,“valid”:true}
  • WS1:从WS2获取响应,并从中创建自己对初始get查询的响应
  • 我使用Postman测试我的RESTAPI

    WS2在使用邮递员时运行良好

    但是当我尝试查询WS1时,我从未从WS2发送的响应中获得json

    希望我明白

    以下是我的一些源代码:

    routes\api.php

    Route::get('/object/{obj_id?}', 'ObjectController@check')->where('obj_id', '[0-9]+');
    
    <?php
    
    namespace App\Http\Controllers;
    
    use Illuminate\Http\Request;
    use Illuminate\Http\Response;
    
    use GuzzleHttp\Exception\GuzzleException;
    use GuzzleHttp\Client;
    
    use App\Http\Requests;
    use App\Http\Controllers\Controller;
    
    class ObjectController extends Controller
    {
        public function check($obj_id)
        {
            $token = 'my personnal access tokens from WS2 Laravel/Passport'
            $client = new Client();
            $body = $client->request('GET','http://S2.ip/api/object/' . $object_id, [
                'Accept' => 'application/json',
                'Content-Type' => 'application/json',
                'Authorization' => 'bearer ' . $token, 
            ])->getBody();
    
        $contents = (string) $body;
        $data = json_decode($contents);
        dd($data); // to see what's inside $data
    
    app\Http\Controllers\ObjectController.php

    Route::get('/object/{obj_id?}', 'ObjectController@check')->where('obj_id', '[0-9]+');
    
    <?php
    
    namespace App\Http\Controllers;
    
    use Illuminate\Http\Request;
    use Illuminate\Http\Response;
    
    use GuzzleHttp\Exception\GuzzleException;
    use GuzzleHttp\Client;
    
    use App\Http\Requests;
    use App\Http\Controllers\Controller;
    
    class ObjectController extends Controller
    {
        public function check($obj_id)
        {
            $token = 'my personnal access tokens from WS2 Laravel/Passport'
            $client = new Client();
            $body = $client->request('GET','http://S2.ip/api/object/' . $object_id, [
                'Accept' => 'application/json',
                'Content-Type' => 'application/json',
                'Authorization' => 'bearer ' . $token, 
            ])->getBody();
    
        $contents = (string) $body;
        $data = json_decode($contents);
        dd($data); // to see what's inside $data
    

    S2究竟返回什么。您可以在这里发布一个来自S2的返回示例吗?在S2中,尝试仅使用类似
    return response()->json($data,200)的内容返回正文。所以它只给你内容。然后尝试从变量中的S1捕获它,并像
    return$received\u data那样传输它
    I将S2改为返回
    response()->json($data,200)
    但是我仍然没有在S1中捕获任何内容,
    $data
    变量仍然为空。我希望您已经找到了解决方案,否则,您可以做的只是注释掉
    $contents=(string)$body
    并更改下一行,如下所示
    $data=json\u decode($body)