Приклад звернення до api на PHP. Створення RESTful API на PHP

Розробляючи проект, я зіткнувся з необхідністю організації клієнт-серверної взаємодії додатків на платформах iOS та Android з моїм сайтом, на якому зберігалася вся інформація - власне БД на mysql, картинки, файли та інший контент.
Завдання, які потрібно було вирішувати - досить прості:
реєстрація/авторизація користувача;
відправка/отримання деяких даних (наприклад, список товарів).

І тут мені захотілося написати свій API для взаємодії з серверною стороною - більшою частиною для практичного інтересу.

Вхідні дані

У своєму розпорядженні я мав:
Сервер - Apache, PHP 5.0, MySQL 5.0
Клієнт - Android, iOS пристрої, будь-який браузер

Я вирішив, що для запитів до сервера та відповідей від нього використовуватиму JSON формат даних - за його простоту та нативну підтримку в PHP та Android. Тут мене засмутила iOS - вона не має нативної підтримки JSON (тут довелося використовувати сторонню розробку).

Також було прийнято рішення, що запити можна буде відсилати як через GET так і через запити POST (тут допоміг $_REQUEST в PHP). Таке рішення дозволило проводити тестування API через GET запити у будь-якому доступному браузері.

Зовнішній вигляд запитів було вирішено зробити таким:
http://[адреса сервера]/[шлях до папки api]/?[назва_api].[назва_методу]=

Шлях до папки api - каталог на який потрібно робити запити, в корені якого лежить файл index.php - він відповідає за виклик функцій та обробку помилок
Назва api – для зручності я вирішив розділити API групи – користувач, база даних, конент і тд. У такому разі кожен api отримав свою назву
Назва методу - ім'я методу, який потрібно викликати у вказаному api
JSON - рядкове подання JSON об'єкта для параметрів методу

Скелет API

Скелет API на серверній стороні складається з кількох базових класів:
index.php - індексний файл каталогу в Apache на нього припадають усі виклики API, він здійснює парсинг параметрів та виклик API методів
MySQLiWorker - клас-одиначка для роботи з базою MySQL через MySQLi
apiBaseCalss.php - батьківський клас для всіх API в системі - кожен API має бути успадкований від цього класу для коректної роботи
apiEngine.php - основний клас системи - здійснює розбір переданих параметрів (після їх попереднього парсингу в index.php) підключення потрібного класу api (через require_once метод), виклик у ньому потрібного методу та повернення результату у JSON форматі
apiConstants.php - клас з константами для api викликів та передачі помилок
apitest.php - тестовий api для тестування нових методів перед їх включенням у продакшн версію

Весь механізм виглядає так:
Ми запитуємо сервер - наприклад www.example.com/api/?apitest.helloWorld= ()
На серверній стороні файл index.php – робить парсинг переданих параметрів. Index.php бере завжди тільки перший елемент зі списку переданих параметрів $_REQUEST - це означає, що конструкція виду www.example.com/api/?apitest.helloWorld= ()&apitest.helloWorld2 - здійснить виклик тільки методу helloWorld в apitest. Виклику ж методу helloWorld2 не відбудеться

Тепер детальніше про кожного

Я спробував достатньо документувати файли, щоб не зайняти багато місця під текст. Однак у тих файлах де немає коментарів, я все ж таки наведу опис.

Index.php

Як вже говорив раніше це вхідний індексний файл для Apache, а значить всі виклики виду www.example.com/api буде приймати він.

0)( require_once "apiEngine.php"; foreach ($_REQUEST як $apiFunctionName => $apiFunctionParams) ( $APIEngine=new APIEngine($apiFunctionName,$apiFunctionParams); echo $APIEngine-akel) ( $jsonError->error="No function called"; echo json_encode($jsonError); ) ?>

Насамперед встановлюємо тип контенту - text/html (потім можна змінити в самих методах) і кодування - UTF-8.
Далі перевіряємо, що в нас щось запитують. Якщо ні, то виводимо JSON з помилкою.
Якщо є параметри запиту, підключаємо файл движка API - apiEngine.php і створюємо клас движка з переданими параметрами і робимо виклик api методу.
Виходимо з циклу, тому що ми вирішили, що будемо обробляти тільки один виклик.

apiEngine.php

Другим за важливістю є клас apiEngine - він є двигуном для виклику api та їх методів.
apiFunctionParams = stripcslashes($apiFunctionParams); //Парсим на масив із двох елементів - назва API, - назва методу в API $this->apiFunctionName = explode("_", $apiFunctionName); ) //Створюємо JSON відповіді function createDefaultJson() ( $retObject = json_decode("()"); $response = APIConstants::$RESPONSE; $retObject->$response = json_decode("()"); return $retObject; ) //Виклик функції за переданими параметрами в конструкторі function callApiFunction() ( $resultFunctionCall = $this->createDefaultJson();//Створюємо JSON відповіді $apiName = strtolower($this->apiFunctionName);//назву API проводимо регістру if (file_exists($apiName . ".php")) ( $apiClass = APIEngine::getApiEngineByName($apiName);//Отримуємо об'єкт API $apiReflection = new ReflectionClass($apiName);//Через рефлексію отримаємо інформацію про клас об'єкта try ( $functionName = $this->apiFunctionName;// Назва методу для виклику $apiReflection->getMethod($functionName);//Перевірюємо наявність методу $response = APIConstants::$RESPONSE; >apiFunctionParams);//Декодуємо параметри запиту в JSON об'єкт if ($jsonParams) ( if (isset($jsonParams->responseBinary))(//Для можливості повернення не JSON, а бінарних даних таких як zip, png та ін контенту return $apiClass->$functionName($jsonParams);//Викликаємо метод в API )else( $resultFunctionCall->$response = $apiClass->$functionName($jsonParams);//Викликаємо метод в API який поверне JSON об'єкт ) ) else ( //Якщо помилка декодування JSON параметрів запиту $resultFunctionCall->errno = APIConstants::$ERROR_ENGINE_PARAMS; $resultFunctionCall->error = "Error given params"; ) ) catch (Exception $ex) ( //Непередбачене виняток $resultFunctionCall->error = $ex->getMessage(); ) ) else ( //Якщо запитуваний API не знайдений $resultFunctionCall->errno = APIConstants::$ERROR_ENGINE_PARAMS; $resultFunctionCall->error = "File not found"; $resultFunctionCall->REQUEST = $_REQUEST; ) ) ?>

apiConstants.php

Цей клас використовується тільки для зберігання констант.

MySQLiWorker.php

Клас-одиначка для роботи з базою. В іншому це звичайний одинак ​​- таких прикладів у мережі дуже багато.

dbName = $ dbName; self::$instance->dbHost = $dbHost; self::$instance->dbUser = $dbUser; self::$instance->dbPassword = $dbPassword; self::$instance->openConnection(); ) return self::$instance; ) //Визначаємо типи параметрів запиту до бази і повертаємо рядок для прив'язки через ->bind function prepareParams($params) ( $retSTMTString = ""; foreach ($params as $value) ( ​​if (is_int($value) || is_double ($value)) ( $retSTMTString.="d"; ) if (is_string($value)) ( $retSTMTString.="s"; ) ) return $retSTMTString; ) //З'єднуємося з базою public function openConnection() ( if (is_null($this->connectLink)) ( $this->connectLink = new mysqli($this->dbHost, $this->dbUser, $this->dbPassword, $this->dbName); $this-> connectLink->query("SET NAMES utf8"); if (mysqli_connect_errno()) ( printf("Підключення неможливо: %s\n", mysqli_connect_error()); ); ) ) return $this->connectLink; ) //Закриваємо з'єднання з базою public function closeConnection() ( if (!is_null($this->connectLink)) ( $this->connectLink->close(); ) ) //Перетворимо відповідь на асоціативний масив public function stmt_bind_assoc(&$stmt, &$out) ( $data = mysqli_stmt_result_metadata($stmt); $fields = array(); $out = array(); $fields = $stmt; $ count = 1; $currentTable = ""; while ($field = mysqli_fetch_field($data)) ( if (strlen($currentTable) == 0) ( $currentTable = $field->table; ) $fields[$count] = &$out[$field->name ]; $count++; ) call_user_func_array("mysqli_stmt_bind_result", $fields); ) ) ?>

apiBaseClass.php

Ну ось ми підійшли до одного з найважливіших класів системи – базовий клас для всіх API у системі.

mySQLWorker = MySQLiWorker::getInstance($dbName,$dbHost,$dbUser,$dbPassword); ) ) function __destruct() ( if (isset($this->mySQLWorker))( //Якщо було встановлено з'єднання з базою, $this->mySQLWorker->closeConnection(); //то закриваємо його коли наш клас більше не потрібен ) ) //Створюємо дефолтний JSON для відповідей function createDefaultJson() ( $retObject = json_decode("()"); return $retObject; ) //Заповнюємо JSON об'єкт за відповіддю з MySQLiWorker function fillJSON(&$jsonObject, &$stmt, &$mySQLWorker) ( $row = array(); $mySQLWorker->stmt_bind_assoc($stmt, $row); while ($stmt->fetch()) ( foreach ($row as $key => $value) ( ​​$ key = strtolower($key); $jsonObject->$key = $value; ) return $jsonObject;

Як видно, цей клас містить у собі кілька «утилітних» методів, таких як:
конструктор, в якому здійснюється з'єднання з базою, якщо поточне API збирається працювати з базою;
деструктор – стежить за звільненням ресурсів – розрив встановленого з'єднання з базою
createDefaultJson - створює дефолтний JSON для відповіді методу
fillJSON - якщо мається на увазі, що запит поверне лише один запис, то даний метод заповнить JSON для відповіді даними з першого рядка відповіді від БД

Створимо свій API

Ось, власне, і весь кістяк цього API. Тепер розглянемо як це все використовувати на прикладі створення першого API під назвою apitest. І напишемо в ньому пару простих функцій:
одну без параметрів
одну з параметрами і їх вона нам і поверне, щоб було видно, що вона їх прочитала
одну яка поверне нам бінарні дані

І так створюємо клас apitest.php наступного змісту

createDefaultJson(); $retJSON->withoutParams = "It\"s method called without parameters"; return $retJSON; ) //http://www.example.com/api/?apitest.helloAPIWithParams=("TestParamOne":"Text of first parameter") function helloAPIWithParams($apiMethodParams) ( $retJSON = $this->createDefaultJson(); if (isset($apiMethodParams->TestParamOne))( //Всі ок параметри вірні, їх і повернемо $retJSON->ret apiMethodParams->TestParamOne; )else( $retJSON->errorno= APIConstants::$ERROR_PARAMS; ) return $retJSON; ) //http://www.example.com/api/?apitest.helloAPIResponseBinary=("responseBina 1) function helloAPIResponseBinary($apiMethodParams)( header("Content-type: image/png"); echo file_get_contents("http://habrahabr.ru/i/error-404-monster.jpg"); ) ) ?>

Для зручності тестування методів, я дописую до них адресу, за якою я можу зробити швидкий запит для тестування.

І так у нас три методи

Function helloAPI() ( $retJSON = $this->createDefaultJson(); $retJSON->withoutParams = "It\"s метод називається без параметрів"; return $retJSON; )

Це найпростіший метод без параметрів. Його адреса для GET виклику www.example.com/api/?apitest.helloAPI= ()

Результатом виконання буде ось така сторінка (у браузері)

Цей метод приймає параметри. Обов'язковим є TestParamOne, для нього зробимо перевірку. Його його не передати, то буде видано JSON з помилкою

Function helloAPIWithParams($apiMethodParams) ( $retJSON = $this->createDefaultJson(); if (isset($apiMethodParams->TestParamOne))( //Всі ок параметри вірні, їх і повернемо $retJSON->retParameter=$a TestParamOne; )else( $retJSON->errorno= APIConstants::$ERROR_PARAMS; ) return $retJSON;
Результат виконання

helloAPIRresponseBinary

І останній метод helloAPIRresponseBinary - поверне бінарні дані - картинку хабра про неіснуючу сторінку (як приклад)
function helloAPIResponseBinary($apiMethodParams)( header("Content-type: image/jpeg"); echo file_get_contents("http://habrahabr.ru/i/error-404-monster.jpg"); )
Як видно – тут є заміна заголовка для виведення графічного контенту.
Результат буде такий

Нещодавно один з моїх відвідувачів мені поставив питання щодо e-mail: "Я вирішив, що це буде дуже корисно іншим користувачам, тим більше, що на складність процесу, що здається, все дуже і дуже просто. Необхідно лише володіти самими елементарними знаннями PHP.

Якщо Ви раптом не розумієте, про що йдеться, прочитайте спочатку статтю: . Йдемо далі. Давайте розберемо, а для яких сайтів потрібний взагалі API:

Перше, що необхідно засвоїти – це те, що APIпотрібен далеко не кожному сайту (навіть якщо він належить до однієї з вищевказаних груп).

Якщо ж Ви вважаєте, що APIна Вашому сайті необхідний, то розберемо приклад того, як він створюється. Нехай у нас буде таке завдання: є ЕПС (як, наприклад, WebMoney). І ми хочемо, щоб користувач міг зі свого коду, користуючись нашим API, дізнатися свій баланс на рахунку.

Створимо файл (наприклад, api.php), який у нас прийматиме GET-запитивід користувачів отримання різної інформації. Напишемо в цьому обробнику такий код:

if ($_GET["action"] == "getbalance") (
$ balance;
//Пізнаємо з бази даних баланс акаунту і записуємо в змінну balance
echo $balance;
}
?>

Тепер розробники APIповинні дати інформацію користувачам про те, як треба надсилати запит, щоб користувач міг дізнатися свій баланс на обліковому записі:

http://mysite.ru/api.php?action=getbalance&key=fa9sgwlgjs9gdsjlgjdsjglsdlgs

Цей запит користувачі формують у своїх скриптах (наприклад, через CURL). Параметр key- Це унікальний ключ кожного користувача. І відповідь цього запиту буде число, що відповідає за баланс користувача. Аналогічно створюються та інші можливості API. Можна додавати інші параметри: наприклад, отримати список операцій поповнення рахунку з однієї дати до іншої. Бажано самі списки повертати у форматі JSON.

У сімох козлів і вовк без ока

Створення RESTful API на PHP

REST або у повній формі, Representational State Transferстало стандартною архітектурою проектування розробки веб-API.

REST є дуже простим інтерфейсом управління інформацією без використання якихось додаткових внутрішніх прошарків. Кожна одиниця інформації однозначно визначається глобальним ідентифікатором, наприклад URL. Кожна URL, у свою чергу, має строго заданий формат.

REST використовує методи HTTP-запиту, щоб скомпонувати себе у існуючу архітектуру HTTP. Ці операції полягають у наступному:

GET – використовується для базових запитів на читання на сервер

PUT- Використовується для зміни існуючого об'єкта на сервері

POST- Використовується для створення нового об'єкта на сервері

DELETE – використовується для видалення об'єкта на сервері

Нині ж до суті, тобто. написання простого API, який ви можете використовувати у своїх проектах.

Що таке API

У широкому значенні API - це інтерфейс веб-додатку, що дозволяє публічно використовувати методи для доступу та управління ззовні. Звичайне використання API - це коли необхідно отримувати дані з програми (наприклад, стаття або інші дані) без фактичного відвідування ресурсу (наприклад сайту). Щоб зробити це можливим, для програми реалізується API, який дозволяє стороннім програмам здійснювати запити і повертати зазначені дані користувачу ззовні. В Інтернеті це часто робиться за допомогою RESTful.

У прикладі запиту статті API може містити URI:

example.com/api/v1/recipe/article

Якщо надіслати запит GET на цю URL-адресу, відповідь може бути списком останніх новин, запит PUT може додати новину до БД.

Якщо запитати /article /141, це буде певна новина. Це приклади показують спосіб взаємодії із додатком.

Створення API

Створимо файл.htaccess для того, щоб GET запити перетворювати на зрозумілі контролеру параметри.

RewriteEngine On RewriteCond %(REQUEST_FILENAME) !-f RewriteCond %(REQUEST_FILENAME) !-d RewriteRule api/v1/(.*)$ api/v1/api.php?request=$1

Що ж означає рядки цього файлу?

У першому рядку перевіряється існування модуля rewrite. Якщо його запущено, виконуються такі рядки.

Далі оголошується можливість перевизначати URL-адресу. Це означає, що шлях api/v1/ буде перенаправлений на api/v1/index.php. Символи (.*) позначають змінні, які необхідно обробити, а $ - це обмежувач, після якого починається наступна логіка. Також - означає нечутливість до регістру, - що змінні будуть приєднані до нового URL, L - mod_rewrite більше не обробляє нічого крім зазначеного.

Оголошуємо клас, властивості та конструктор.

abstract class API ( /** * Property: method * GET, POST, PUT, DELETE */ protected $method = ""; /** * Property: endpoint * $endpoint = ""; ; /** * Property: args * Any additional URI components після закінчення і статі мають бути виконані, в нашому * case, an integer ID for the resource. ///* or / /*/ protected $args = Array(); /** * Property: file * Stores the input of the PUT request */ protected $file = Null; /** * Constructor: __construct * Allow for CORS, assemble and pre-process the data */ public function __construct($request) ( header("Access-Control-Allow-Orgin: *"); header("Access-Control -Allow-Methods: *"); header("Content-Type: application/json"); $this->args = explode("/", rtrim($request, "/")); = array_shift($this->args); якщо (array_key_exists(0, $this->args) && !is_numeric($this->args)) ( $this->verb = array_shift($this->args); $this->method = $_SERVER["REQUEST_METHOD"]; DELETE") ( $this->method = "DELETE"; ) else if ($_SERVER["HTTP_X_HTTP_METHOD"] == "PUT") ( $this->method = "PUT"; ) else ( throw new Exception(" Unexpected Header"); ) ) switch($this->method) ( case "DELETE": case "POST": $this->request = $this->_cleanInputs($_POST); break; case "GET": $ this->request = $this->_cleanInputs($_GET); $this->file = file_get_contents("php://input"); break; default: $this->_response("Invalid Method", 405); break; ) ) public function processAPI() ( if (method_exists($this, $this->endpoint)) ( return $this->_response($this->($this->endpoint)($this->args))); ) return $this->_response("No Endpoint: $this->endpoint", 404); ) private function _response($data, $status = 200) ( header("HTTP/1.1 " . $status . " " ). $this->_requestStatus($status)); return json_encode($data); ) private function _cleanInputs($data) ( $clean_input = Array(); => $v) ( $clean_input[$k] = $this->_cleanInputs($v); ) ) else ( $clean_input = trim(strip_tags($data)); ) return $clean_input; ) private function _requestStatus($ code) ( $status = array(200 => "OK", 404 => "Not Found", 405 => "Method Not Allowed", 500 => "Internal Server Error",); return ($status[$code ])?$status[$code]:$status; ) )

Оголосивши цей абстрактний клас, ми заборонили PHP створювати конкретний екземпляр цього класу. Звідти ми можемо використовувати методи, успадкувавши в іншому класі. Захищений метод може бути доступний лише у самому класі та його нащадках.

Створення класу API

Створюємо клас MyAPI, який успадковує абстрактний клас API.

require_once "API.class.php"; class MyAPI extends API ( protected $User; public function __construct($request, $origin) ( parent::__construct($request); // Abstracted out for example $APIKey = new Models\APIKey(); $User = new Models \User(); if (!array_key_exists("apiKey", $this->request)) ( throw new Exception("No API Key provided"); ) else if (!$APIKey->verifyKey($this->request) ["apiKey"], $origin)) ( throw new Exception("Invalid API Key"); ) else if (array_key_exists("token", $this->request) && !$User->get("token", $this->request["token"])) ( throw new Exception("Invalid User Token"); ) $this->User = $User; ) /** * Example of an Endpoint */ protected function example() ( if ($this->method == "GET") ( return "Your name is " . $this->User->name; ) else ( return "Only accepts GET requests"; ) ) )

Використання API

// Requests from the same server don"t have a HTTP_ORIGIN header if (!array_key_exists("HTTP_ORIGIN", $_SERVER)) ( $_SERVER["HTTP_ORIGIN"] = $_SERVER["SERVER_NAME"]; ) try ( $API = new MyAPI($_REQUEST["request"], $_SERVER["HTTP_ORIGIN"]); echo $API->processAPI(); >getMessage()));

Корявий переклад цього: http://coreymaynard.com/blog/creating-a-restful-api-with-php/

PHP offers three different APIs to connect to MySQL. Більше ми будемо бачити APIs виконані з mysql, mysqli, і PDO extensions. Всі code snippet створюють підключення до MySQL server running на "example.com" з використанням username "user" і password "password". And a query is run to greet the user.

Example #1 Comparing the three MySQL APIs

// mysqli
$ mysqli = new mysqli ("example.com", "user", "password", "database");
$result = $mysqli ->query();
$row = $result -> fetch_assoc();

// PDO
$pdo = новий PDO ( "mysql:host=example.com;dbname=database", "user", "password");
$statement = $pdo -> query ( "SELECT "Hello, dear MySQL user!" AS _message FROM DUAL");
$row = $statement -> fetch (PDO :: FETCH_ASSOC);
echo htmlentities ($row ["_message"]);

// mysql
$c = mysql_connect ("example.com", "user", "password");
mysql_select_db ("database");
$result = mysql_query ( "SELECT "Hello, dear MySQL user!" AS _message FROM DUAL");
$row = mysql_fetch_assoc ($result);
echo htmlentities ($row ["_message"]);
?>

Recommended API

Це recommended use either the mysqli or PDO_MySQL extensions. Це не recommended, щоб використати old mysql extension для нового розвитку, як він був розпізнаний в PHP 5.5.0 і був переміщений в PHP 7. Збільшений характер comparison matrix is ​​provided below. Надзвичайна продуктивність всіх трьох стилів розглядається як самий. Завжди ефективність розширення contributes тільки fraction of total run time of PHP web request. Often, the impact is as low as 0.1%.

Feature comparison

ext/mysqli PDO_MySQL ext/mysql
PHP version introduced 5.0 5.1 2.0
Included with PHP 5.x Yes Yes Yes
Included with PHP 7.x Yes Yes No
Development status Active Active Maintenance only in 5.x; removed in 7.x
Lifecycle Active Active Deprecated in 5.x; removed in 7.x
Recommended for new projects Yes Yes No
OOP Interface Yes Yes No
Procedural Interface Yes No Yes
API supports non-blocking, asynchronous queries with mysqlnd Yes No No
Persistent Connections Yes Yes Yes
API supports Charsets Yes Yes Yes
API supports server-side Prepared Statements Yes Yes No
API supports client-side Prepared Statements No Yes No
API supports Stored Procedures Yes Yes No
API supports Multiple Statements Yes Most No
API supports Transactions Yes Yes No
Transactions може бути controlled with SQL Yes Yes Yes
Supports all MySQL 5.1+ функціональність Yes Most No

У мене часто запитують, як працювати з API. Найбільш, популярним завданням, пов'язаним з API, є - робота з API ВКонтакте. У цій статті я покажу, як працювати з API ВКонтакте, а, головне, покажу Вам, що всі API працюють за єдиним принципом.

Ось порядок дій, який Вам необхідно зробити, щоб почати працювати з будь-яким API:

  1. Знайти документаціюпо потрібному API.
  2. Подивитись приклади підключення до API. Тут можуть бути різні варіанти. Наприклад, на одному сервісі вимагатимуть секретний ключ, який видається після реєстрації. На другому сервісі всі запити не вимагають секретних ключів. На третьому сервісі є і з секретним ключем, і без варіанти роботи. Іноді секретний ключ називають токеном.
  3. Копіювати простий готовий кодз сайту документації та перевірити його роботу. Якщо не працює, то шукайте помилку у себе, тому що навряд чи вона буде біля сервісу.
  4. Знайтиу документації метод, що вирішує Ваше завдання.
  5. Використовуючи приклади та опис методу, надіслати правильний запит до API.
  6. Залежно від формату відповіді, розібрати його на " складові частини", а далі вже робити те, що потрібно - вивести користувачеві, зберегти у файл, відправити до бази даних тощо.

А як приклад дотримання цієї інструкції ми розберемо API ВКонтакте. Отже:

  1. Посилання на документацію.
  2. У разі є методи, які загальнодоступні, тому не вимагають токена, а є методи, потребують його.
  3. У цьому випадку прикладів конкретною мовою я не знайшов. Можливо, вони є, але явно не на увазі. Звичайно ж, у APIдля кожного методу є приклади різними мовами.
  4. Ми хочемо вивести 5 останніх записів зі стіни конкретного користувача, а потім вивести їх у себе на сайті. Потрібний нам метод.

Тепер ми повинні надіслати запит до API, використовуючи опис методу. Робити ми це будемо через PHP:

$wall = file_get_contents("https://api.vk.com/method/wall.get?v=5.3&filter=others&domain=myrusakov&count=5");
print_r($wall);
?>

В даному випадку, я використовую API 5.3 (v=5.3), виводжу всі записи незалежно від автора ( filter=others) зі своєї сторінки ( domain=myrusakov) в кількості 5 штук ( count=5). Думаю, що тут дуже прозоро.

Ми отримали відповідь у форматі JSON, і тепер нам потрібно перейти до останнього пункту - розібрати відповідь складові частиниДалі ми з Вами виведемо записи зі стіни в більш-менш читальному вигляді на сторінці нашого сайту. Результуючий PHP-код:

$wall = file_get_contents("http://api.vk.com/method/wall.get?v=5.3&filter=others&domain=myrusakov&count=5"); // Надсилаємо запит
$wall = json_decode($wall); // Перетворимо JSON-рядок на масив
$wall = $wall->response->items; // Отримуємо масив коментарів
for ($i = 0; $i< count($wall); $i++) {
echo "

".($i + 1).". ".$wall[$i]->text."
".date("Y-m-d H:i:s", $wall[$i]->date)."

// Виводимо записи
}
?>

Як бачите, все дуже просто. Найскладніша частина – розібрати на складові елементи. Я волію виводити результат від APIчерез print_r, А потім писати обробку цього. Хоча можна переглянути приклад відповіді в описі методу, а далі вже написати парсер.



Подібні публікації