我使用guzzle作为http客户端来测试我的symfony api。
文档中提供了url选项,但如何通过userid& api id参数,这样就可以删除特定用户的特定记录。
当我用curl测试时
curl -i -X DELETE http://localhost/us/serenify/web/app_dev.php/userapi/delete/1/6
我的api工作正常,显示出适当的回应。
但我无法用guzzle进行测试,因为我无法找到传递参数的选项。
答案 0 :(得分:0)
以下是定义和执行Symfony路由的示例:
{
"operations": {
"deleteEntity": {
"httpMethod": "DELETE",
"uri": "/userapi/delete/{userid}/{apiid}",
"summary": "Deletes an entity",
"parameters": {
"userid": {
"location": "query"
},
"apiid": {
"location": "query"
}
}
}
}
}
和代码:
class MyApi
{
protected $client;
public function __construct(ClientInterface $client, $baseUrl)
{
$this->client = $client;
//tell the client what the base URL to use for the request
$this->client->setBaseUrl($baseUrl);
//fill the client with all the routes
$description = ServiceDescription::factory("/path/to/routes.json");
$this->client->setDescription($description);
}
public function deleteEntity($userId, $apiId)
{
$params = array(
'userid' => $userId,
'apiid' => $apiId
);
$command = $this->client->getCommand('deleteEntity', $params);
$command->prepare();
$response = $this->client->execute($command);
return $response;
}
}
$client = new Guzzle\Service\Client();
$api = new MyApi($client, ' http://localhost/us/serenify/web/app_dev.php');
$api->deleteEntity(1, 6);
现在,按照目前的情况,生成的路线看起来像
<强> http://localhost/us/serenify/web/app_dev.php/userapi/delete?userid=1&apiid=6 强>
如果您希望参数不被Guzzle作为查询参数传递,而是像URL参数一样,您只需将JSON定义文件中的类型从查询更改为 URI 强>
PS:我没有测试上面的代码。可能是开箱即用的工作,也可能不是。可能需要进行一些小调整。