php REST api

Первое знакомство с rest api для новичка может оказаться затруднительным, т.к. просто и с толком нигде не объяснено. Люди пытаются показать на примерах микрофреймворков, тем самым усугубляя ситуацию.
На самом деле все просто — rest api это запрос, при к-м передается не просто переменные,как при POST или GET, а самый настоящий xml или json, в ответе получая такой же формат. Покажу на примере yandex geolocation. Геолокацию с использованием api на ООП я публиковал http://phpjs.ru/2017/03/21/google-geolocation-api/ ‎.  Здесь покажу голый запрос.
Создаем минимальный json. Ключ к апи геолокации яндекса надо получить. Заметьте, почти все сервисы для протокола rest требуют авторизации, напр. в amocrm, shiptor, google geo, elba бухгалтерия, sms рассылка — все они дают 200 ответ только при авторизации.


$json = '{
"common": {
"version": "1.0",
"api_key": "AHpH0VgBAAAA8FcHXwIA7b8-WHvp5NDvQe08RTwA0cxkgs4AAAAAAAAAAADyJ-gsqxw5zvtMFdteIJKXOxX8LA=="
},
"gsm_cells": [{}],
"wifi_networks": [
{
}
],
"ip": {
"address_v4": "46.147.78.172"
}
}';

И сам запрос.


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://api.lbs.yandex.net/geolocation');

curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_POST,'POST');
curl_setopt($ch,CURLOPT_POSTFIELDS, 'json='.$json);
curl_setopt($ch,CURLOPT_HTTPHEADER,array(
'Content-Type: application/x-www-form-urlencoded',
));
$res = curl_exec($ch);

var_dump($res);
curl_close($ch);

Ответ получаю такой


string(213) "{
"position" : {
"altitude" : 0.0,
"altitude_precision" : 30.0,
"latitude" : 55.74355316162109,
"longitude" : 52.39582061767578,
"precision" : 100000.0,
"type" : "ip"
}
}
"

Для xml все тож самое. Создаем xml


$xml = '<ya_lbs_request>
<common>
<version>1.0</version>
<api_key>AHpH0VgBAAAA8FcHXwIA7b8-WHvp5NDvQe08RTwA0cxkgs4AAAAAAAAAAADyJ-gsqxw5zvtMFdteIJKXOxX8LA==</api_key>
</common>
<gsm_cells>
<cell>
<countrycode>250</countrycode>
<operatorid>1</operatorid>
<cellid>2294</cellid>
<lac>6405</lac>
<signal_strength>-45</signal_strength>
<age>1000</age>
</cell>
</gsm_cells>
<wifi_networks>
<network>
<mac>12-34-56-78-9A-BC</mac>
<signal_strength>-90</signal_strength>
<age>2000</age>
</network>
</wifi_networks>
<ip>
<address_v4>46.147.78.172</address_v4>
</ip>
</ya_lbs_request>';

В запросе меняем json на xml


curl_setopt($ch,CURLOPT_POSTFIELDS, 'xml='.$xml);

Ответ такой


string(303) "<?xml version="1.0" encoding="utf-8"?>
<ya_lbs_response>
<position>
<latitude>56.8267555</latitude>
<longitude>60.6455536</longitude>
<precision>140.0000000</precision>
<altitude>0.0</altitude>
<altitude_precision>30.0</altitude_precision>
<type>wifi</type>
</position>
</ya_lbs_response>
"

Leave a comment

Your email address will not be published.


*