Azure DevOps API - недействительный патч-документ - PullRequest
0 голосов
/ 30 апреля 2020

Я пытаюсь подключиться к 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, который был бы очень признателен.

1 Ответ

0 голосов
/ 01 мая 2020

Пожалуйста, попробуйте добавить [{}] вне вашего тела запроса.

[
  {
    "op": "add",
    "path": "/fields/System.Title",
    "from": "null",
    "value": "sample task"
  }
]

Microsoft.VisualStudio.Services.Common.VssPropertyValidationException

Это сообщение об ошибке означает, что система не может успешно обработать свойство тела. Как обычно, пользователь должен отправить тело запроса с правильным свойством, чтобы наша система могла успешно читать. Затем анализирует его содержимое, например 'op', 'path' и др. c.

...