я прочитал здесь, что Веб-служба Odata также поддерживает формат JSON. Но как я могу это получить?
Когда я отправляю запрос, я получаю только следующий формат> application/atom+xml
я прочитал здесь, что Веб-служба Odata также поддерживает формат JSON. Но как я могу это получить?
Когда я отправляю запрос, я получаю только следующий формат> application/atom+xml
Попробуйте что-то вроде этого:
$.ajax({
type: "GET",
contentType: "application/json; charset=utf-8",
datatype: "json",
url: odataSelect,
beforeSend: function (XMLHttpRequest) { XMLHttpRequest.setRequestHeader("Accept", "application/json"); },
success: function (data, textStatus, XmlHttpRequest)
{
ProcessReturnedEntities(data.d.results);
ProcessReturnedEntity(data.d);
},
error: function (XmlHttpRequest, textStatus, errorThrown) { alert('OData Select Failed: ' + odataSelect); }
});
См. этот сайт для полного пример.
Для WinJS внутри приложений Windows 8 с HTML и JS это следующее:
WinJS.xhr({
type: "GET",
datatype: "json",
url: 'http://localhost:7048/DynamicsNAV70/OData/P_21/',
headers: {
"Content-type": "application/json; charset=utf-8", "Accept": "application/json" },
}).done(function (data, textStatus, XmlHttpRequest) {
console.log();
},
function (err) {
console.log();
});
Обратите внимание на другое определение заголовка. Значения точно такие же.
Для связи с вашими веб-службами OData с использованием JSON вместо XML вам нужно всего лишь установить следующие два заголовка:
Accept: application/json
Content-Type: application/json; charset=utf-8
В качестве альтернативы вы также можете поставить ?$format=json
в конце URL-адреса.
Это верно независимо от того, какой язык программирования вы используете для связи с Microsoft Dynamics NAV. Это работает одинаково для JavaScript, JAVA, Python, Ruby, PHP, ...
Вот как сделать базовый запрос GET из PHP:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://<Server>:<WebServicePort>/<ServerInstance>/OData/Company(\'<CompanyName>\')/customer(\'1\')');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, false);
curl_setopt($ch, CURLOPT_USERPWD, 'username:password');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Accept: application/json',
'Content-Type: application/json; charset=utf-8',
]);
$response = json_decode(curl_exec($ch), TRUE);
echo json_encode($response, JSON_PRETTY_PRINT);
// Close handle
curl_close($ch);
Вот как сделать базовый POST-запрос из PHP:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://<Server>:<WebServicePort>/<ServerInstance>/OData/Company(\'<CompanyName>\')/customer');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
"Name" => "This is a test customer",
...
]));
curl_setopt($ch, CURLOPT_USERPWD, 'username:password');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Accept: application/json',
'Content-Type: application/json; charset=utf-8',
]);
$response = json_decode(curl_exec($ch), TRUE);
echo json_encode($response, JSON_PRETTY_PRINT);
curl_close($ch);
Вот как сделать базовый запрос PATCH из PHP:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://<Server>:<WebServicePort>/<ServerInstance>/OData/Company(\'<CompanyName>\')/customer(\'1\')');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH');
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
"Name" => "This is a test customer",
...
]));
curl_setopt($ch, CURLOPT_USERPWD, 'username:password');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Accept: application/json',
'Content-Type: application/json; charset=utf-8',
'If-Match: W/"\'' . $etag . '\'"'
// You can get your etag value by doing a get request first
]);
$response = json_decode(curl_exec($ch), TRUE);
echo json_encode($response, JSON_PRETTY_PRINT);
curl_close($ch);
Вот как сделать базовый запрос DELETE из PHP:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://<Server>:<WebServicePort>/<ServerInstance>/OData/Company(\'<CompanyName>\')/customer(\'1\')');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
curl_setopt($ch, CURLOPT_USERPWD, 'username:password');
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Accept: application/json',
'Content-Type: application/json; charset=utf-8',
'If-Match: W/"\'' . $etag . '\'"'
// You can get your etag value by doing a get request first
]);
$response = json_decode(curl_exec($ch), TRUE);
echo json_encode($response, JSON_PRETTY_PRINT);
curl_close($ch);
Если вам нужно создать/обновить данные, не забудьте Json-кодировать ваши поля POST:
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([
"Name"=> "This is the name of my new customer"
]));
Использование вместо этого строки запроса или массива вызовет ошибку An error occurred while processing this request.
, которая может надолго вас озадачить...
Для тех, кто не любит работать с необработанными запросами cURL, я только что загрузил базовый класс-оболочку OO, который вы можете найти по адресу суть.