Я пытаюсь подключиться к Azure Dev Ops API, используя PHP, Guzzle и Laravel. Я могу успешно подключиться и получить рабочую позицию с кодом ниже:
Route::get('/getworkitem', function() {
$response = Http::withBasicAuth('Username', 'PAT')
->get('https://dev.azure.com/{Organisation}/{Project}/_apis/wit/workitems/32?fields=System.WorkItemType,System.AssignedTo&$expand=Links&api-version=5.1');
return $response;
});
Я пытаюсь выполнить запрос POST, используя HTTP-клиент Laravel, чтобы создать новый рабочий элемент с кодом ниже:
Route::get('/add', function() {
$requiredata = array (
'op' => 'add',
'path' => '/fields/System.Title',
'from' => null,
'value' => 'Sample Task'
);
$response = Http::withBasicAuth('Username', 'PAT')->withHeaders([
'Content-Type' => 'application/json-patch+json',
])->post('https://dev.azure.com/Oraganisation/{Project}/_apis/wit/workitems/$issue?api-version=5.1', [
'body' => json_encode($requiredata,JSON_UNESCAPED_SLASHES)
]);
dd(json_decode($response->getBody()));
});
Однако, когда я запускаю это, я получаю следующий ответ:
+"$id": "1"
+"innerException": null
+"message": "You must pass a valid patch document in the body of the request."
+"typeName": "Microsoft.VisualStudio.Services.Common.VssPropertyValidationException, Microsoft.VisualStudio.Services.Common"
+"typeKey": "VssPropertyValidationException"
+"errorCode": 0
+"eventId": 3000
Для меня это означает, что 'op' в теле ответа неверно, но когда Я проверяю, что он отправляет правильную информацию.
Затем я попытался выполнить запрос через Guzzle с помощью следующего:
Route::get('/add2', function() {
$headers = [
'Content-Type' => 'application/json-patch+json',
];
$body = [
'op' => 'add',
'path' => '/fields/System.Title',
'from' => null,
'value' => 'Sample Task'
];
$body = json_encode($body,JSON_UNESCAPED_SLASHES);
$client = new Client();
$res = $client->request('POST', 'https://dev.azure.com/{Organisation}/{Project}/_apis/wit/workitems/$Issue?api-version=5.1', [
'auth' => 'Username', 'Password'
], $headers, $body);
dd(json_decode($res->getBody()));
});
Это возвращает нулевое значение.
Мне удалось получить POST-запрос для работы в Почтальоне, но не в PHP. Я прошел через Google и не нашел ничего, что указывало бы на то, что я сделал неправильно, но если бы кто-то смог указать мне правильное направление, почему он работает как GET, но не с POST, который был бы очень признателен.