两个独立的Laravel实例之间的API


API between two separate instances of Laravel

我想弄清楚我有一个问题。我在同一台服务器上有2个laravel设置,每个都是通过vhosts控制的独立站点。

SiteA需要作为SiteB的API。在SiteA中,我通过

设置了一个API
Route::group(['prefix' => 'api/v1'], function () {
    Route::post('postProject', array('as' => 'postProject', 'uses' => 'APIController@postProject'));
});

现在,控制器的功能只是如下

public function postProject(Project $project)
{
    dd($project);
}

在SiteB中,我想调用这个API。因此,我设置了一个包含项目对象的路由(我已经尝试了get和post)

Route::get('projects/{projects}/postProject', array('as' => 'projects.postProject', 'uses' => 'APIController@postProject'));

这个控制器函数执行以下操作

public function postProject($project)
{
    $client = new GuzzleHttp'Client();
    $req = $client->request('POST', 'http://localhost/api/v1/postProject', [
        'body' => $project,
        'headers' => [
            'Content-Type' => 'text/xml',
            'Content-Length' => strlen($project),
        ]
    ]);
    $output = $req->getBody()->getContents();
    return $output;
}

我有localhost作为一个示例url,所以真正的url没有暴露。当发出post请求时,siteB收到的错误是404未找到。如果我在siteA上设置了一个简单的get函数来返回一些东西,那么siteB就可以毫无问题地执行这个API调用。当我试图从站点b到站点a发布一些东西时,问题就出现了。

另外,当我传递$project对象时,是否也有办法发送它的相关模型?$project与其他一些模型有一对多的关系,理想情况下,我希望获得相关数据。

我认为你只需要急于加载关系

public function postProject()
{
    //dd($project);
    Project::with('relation1', 'relation2')->find($id);
}