Пример за достъп до 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 обекта за параметри на метода

Skeleton 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 в апитест. Методът helloWorld2 няма да бъде извикан

Сега повече подробности за всеки

Опитах се да документирам достатъчно файловете, за да не заемат много място за текст. Въпреки това, в тези файлове, където няма коментари, все пак ще дам описание.

Index.php

Както казах по-рано, това е входният индексен файл за Apache, което означава, че ще приема всички извиквания като www.example.com/api.

0)( require_once "apiEngine.php"; foreach ($_REQUEST as $apiFunctionName => $apiFunctionParams) ( $APIEngine=new APIEngine($apiFunctionName,$apiFunctionParams); echo $APIEngine->callApiFunction(); break; ) )else ( $jsonError->error="Няма извикана функция"; echo json_encode($jsonError); ) ?>

Първо задаваме типа на съдържанието - text/html (след това можете да го промените в самите методи) и кодирането - UTF-8.
След това проверяваме дали ни искат нещо. Ако не, извеждаме JSON с грешка.
Ако има параметри на заявката, тогава свързваме файла на API двигателя - apiEngine.php и създаваме клас на двигателя с предадените параметри и правим извикване на api метода.
Излизаме от цикъла, тъй като решихме, че ще обработим само едно повикване.

apiEngine.php

Вторият най-важен клас е класът apiEngine - това е двигател за извикване на api и техните методи.
apiFunctionParams = stripclashes($apiFunctionParams); //Разбиране на масив от два елемента - името на API, - името на метода в API $this->apiFunctionName = explode("_", $apiFunctionName); ) //Създаване на JSON функция за отговор createDefaultJson() ( $retObject = json_decode("()"); $response = APIConstants::$RESPONSE; $retObject->$response = json_decode("()"); return $retObject ;). регистрирайте ако (file_exists($apiName . ".php")) ( $apiClass = APIEngine::getApiEngineByName($apiName);//Вземете API обекта $apiReflection = new ReflectionClass($apiName);//Чрез отражение ще получим информация за обекта try на класа ( $functionName = $this->apiFunctionName;//Име на метода за извикване $apiReflection->getMethod($functionName);//Проверка за наличието на метода $response = APIConstants ::$RESPONSE; $jsonParams = json_decode($this- >apiFunctionParams);//Декодиране на параметрите на заявката в JSON обект if ($jsonParams) ( if (isset($jsonParams->responseBinary))(//За да можете да връща не JSON, а двоични данни като zip, png и друго съдържание връща $apiClass->$functionName($jsonParams);//Извикване на метод в API )else( $resultFunctionCall->$response = $apiClass->$ functionName($jsonParams);//Извикване на метод в API, който ще върне JSON обект) ) else ( //Ако има грешка при декодиране на параметрите на JSON заявка $resultFunctionCall->errno = APIConstants::$ERROR_ENGINE_PARAMS; $resultFunctionCall->error = "Грешка при дадени параметри"; ) ) catch (Изключение $ex) ( //Неочаквано изключение $resultFunctionCall->error = $ex->getMessage(); ) ) else ( //Ако исканият API не е намерен $resultFunctionCall->errno = APIConstants::$ ERROR_ENGINE_PARAMS; $resultFunctionCall->error = "Файлът не е намерен"; $resultFunctionCall->REQUEST = $_REQUEST; ) return json_encode($resultFunctionCall); ) ) ?>

apiConstants.php

Този клас се използва само за съхраняване на константи.

MySQLiWorker.php

Единен клас за работа с базата данни. Иначе това е обикновен самотник - има много такива примери в интернет.

dbName = $dbName; self::$instance->dbHost = $dbHost; self::$instance->dbUser = $dbUser; self::$instance->dbPassword = $dbPassword; self::$instance->openConnection(); ) връща себе си::$екземпляр; ) //Определяне на типовете параметри на заявката към базата данни и връщане на низ за обвързване чрез ->функция за свързване подготвиПарамс($params) ( $retSTMTString = ""; foreach ($params като $value) ( ​​​​if (is_int( $value) || is_double ($value)) ( $retSTMTString.="d"; ) if (is_string($value)) ( $retSTMTString.="s"; ) ) return $retSTMTString; ) //Свързване към публична функция на база данни 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()); $this->connectLink = null; ) else ( mysqli_report(MYSQLI_REPORT_ERROR ); ) ) return $this->connectLink; ) //Затворете връзката към публичната функция на базата данни closeConnection() ( if (!is_null($this->connectLink)) ( $this- >connectLink->close(); ) ) //Преобразуване на отговора в публична функция на асоциативен масив stmt_bind_assoc(&$stmt, &$out) ( $data = mysqli_stmt_result_metadata($stmt); $ полета = масив (); $out = масив(); $ полета = $ stmt; $count = 1; $currentTable = ""; докато ($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); ) ) функция __destruct() ( if (isset($this->mySQLWorker))( //Ако е установена връзка с базата данни, $this->mySQLWorker->closeConnection(); //след това го затворете, когато нашият клас е вече не е необходим ) ) //Създаване на JSON по подразбиране за функция за отговори createDefaultJson() ( $retObject = json_decode("()"); return $retObject; ) //Попълване на JSON обекта с отговора от функцията MySQLiWorker 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; ) break; ) return $jsonObject; ) ) ?>

Както можете да видите, този клас съдържа няколко „полезни“ метода, като например:
конструктора, в който се осъществява връзката с базата данни, ако текущият API ще работи с базата данни;
деструктор - следи освобождаването на ресурси - прекъсване на установената връзка с базата данни
createDefaultJson - създава JSON по подразбиране за отговора на метода
fillJSON - ако се предполага, че заявката ще върне само един запис, тогава този метод ще запълни JSON за отговора с данни от първия ред на отговора от базата данни

Нека създадем наш собствен API

Това всъщност е целият гръбнак на този API. Сега нека да разгледаме как да използваме всичко това, използвайки примера за създаване на първия API, наречен apitest. И нека напишем няколко прости функции в него:
един без параметри
един с параметрите и тя ще ни ги върне, за да е ясно, че ги е прочела
такъв, който ще ни върне двоични данни

И така създаваме клас apitest.php със следното съдържание

createDefaultJson(); $retJSON->withoutParams = "Това е метод, извикан без параметри"; връща $retJSON; ) //http://www.example.com/api/?apitest.helloAPIWithParams=("TestParamOne":"Текст на първия параметър") функция helloAPIWithParams($apiMethodParams) ( $retJSON = $this->createDefaultJson(); if (isset($apiMethodParams->TestParamOne))( //Всичко е наред, параметрите са правилни, ние ще ги върнем $retJSON ->retParameter=$ apiMethodParams->TestParamOne; )else( $retJSON->errorno= APIConstants::$ERROR_PARAMS; ) return $retJSON; ) //http://www.example.com/api/?apitest.helloAPIResponseBinary= ("responseBinary": 1) функция helloAPIResponseBinary($apiMethodParams)( header("Content-type: image/png"); echo file_get_contents("http://habrahabr.ru/i/error-404-monster.jpg") ; ) ) ?>

За удобство на методите за тестване добавям към тях адрес, на който мога да направя бърза заявка за тестване.

И така, имаме три метода

Функция helloAPI() ( $retJSON = $this->createDefaultJson(); $retJSON->withoutParams = "Това е метод, извикан без параметри"; връща $retJSON; )

Това е прост метод без параметри. Неговият адрес за GET повикване е www.example.com/api/?apitest.helloAPI= ()

Резултатът от изпълнението ще бъде страница като тази (в браузъра)

Този метод приема параметри. TestParamOne е необходим и ние ще направим проверка за него. Не може да бъде предадено, JSON ще бъде върнат с грешка

Функция helloAPIWithParams($apiMethodParams) ( $retJSON = $this->createDefaultJson(); if (isset($apiMethodParams->TestParamOne))( //Всичко е наред, параметрите са правилни, ние ще ги върнем $retJSON->retParameter =$apiMethodParams-> TestParamOne; )else( $retJSON->errorno= APIConstants::$ERROR_PARAMS; ) върне $retJSON; )
Резултат от изпълнението

helloAPIResponseBinary

И последният метод helloAPIResponseBinary - ще върне двоични данни - снимка на хабр за несъществуваща страница (като пример)
функция helloAPIResponseBinary($apiMethodParams)( header("Content-type: image/jpeg"); echo file_get_contents("http://habrahabr.ru/i/error-404-monster.jpg"); )
Както можете да видите, има заместване на заглавието за показване на графично съдържание.
Резултатът ще бъде такъв

Неотдавна един от моите посетители ми зададе въпрос относно електронна поща: "". Реших, че това ще бъде много полезно за други потребители, особено след като въпреки очевидната сложност на процеса, всичко е много, много просто. Просто трябва да имате най-основните познания PHP.

Ако изведнъж не разбирате за какво говорим, първо прочетете статията:. Продължавай. Нека да разгледаме за какви сайтове са необходими? API:

Първото нещо, което трябва да разберете е, че APIНе всеки сайт се нуждае от него (дори и да принадлежи към една от горните групи).

Ако смятате, че APIе необходимо на вашия уебсайт, тогава нека да разгледаме пример за това как се създава. Нека имаме следната задача: има EPS (като напр. WebMoney). И ние искаме потребителят да може от своя код, използвайки нашия API, разберете салдото по сметката си.

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

if ($_GET["action"] == "getbalance") (
$салдо;
//Намерете баланса на акаунта от базата данни и го запишете в променливата баланс
ехо $баланс;
}
?>

Сега разработчиците APIтрябва да предостави информация на потребителите как да подадат заявка, така че потребителят да може да разбере салдото по сметката си:

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

Потребителите формират тази заявка в своите скриптове (например чрез къдрица). Параметър ключе уникален ключ за всеки потребител. И отговорът на тази заявка ще бъде номерът, отговорен за баланса на потребителя. Всички други възможности се създават по същия начин. API. Можете да добавите различни други параметри: например, да получите списък с транзакции за попълване на сметка от една дата до друга. Препоръчително е да върнете самите списъци във формата JSON.

Седем козлета и вълк без око

Създаване на RESTful API в PHP

REST или в пълна форма, Представителен държавен трансферсе превърна в стандартна дизайнерска архитектура за разработка на уеб 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 заявка може да добави новината към базата данни.

Ако поискате /статия /141, ще е категорична новина. Тези примери показват как да взаимодействате с приложението.

Създаване на собствен API

Нека създадем .htaccess файл за преобразуване на GET заявки в параметри, разбираеми за контролера.

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

Какво означават редовете в този файл?

Първият ред проверява за съществуването на модула за пренаписване. Ако се изпълнява, се изпълняват следните редове.

След това се обявява възможността за предефиниране на URL адреси. Това означава, че пътят на api/v1/ ще бъде пренасочен към api/v1/index.php. Символите (.*) означават променливи, които трябва да бъдат обработени, а $ е разделителят, след който започва следващата логика. Също така - означава, че регистърът не е чувствителен - че променливите ще бъдат добавени към новия URL, L - mod_rewrite вече не обработва нищо друго освен посочения.

Декларираме класа, свойствата и конструктора.

API за абстрактен клас ( /** * Свойство: метод * GET, POST, PUT, DELETE */ защитен $метод = ""; /** * Свойство: крайна точка * Моделът, поискан в URI. напр.: /файлове */ защитен $endpoint = ""; /** * Свойство: глагол * Незадължителен допълнителен дескриптор за крайната точка, използван за неща, които * не могат да бъдат обработени от основните методи. напр.: /files/process */ protected $verb = "" ; /** * Свойство: args * Всички допълнителни URI компоненти след крайната точка и глагола са премахнати, в нашия * случай, целочислен идентификатор за ресурса. напр.: / ///* или / /*/ защитени $args = Array(); /** * Свойство: файл * Съхранява входа на PUT заявката */ protected $file = Null; /** * Конструктор: __construct * Разрешаване на CORS, сглобяване и предварителна обработка на данните */ публична функция __construct($request) ( header("Access-Control-Allow-Orgin: *"); header("Access-Control -Allow-Methods: *"); header("Content-Type: application/json"); $this->args = explode("/", rtrim($request, "/")); $this->endpoint = array_shift($this->args); if (array_key_exists(0, $this->args) && !is_numeric($this->args)) ( $this->verb = array_shift($this->args); ) $this->method = $_SERVER["REQUEST_METHOD"]; if ($this->method == "POST" && array_key_exists("HTTP_X_HTTP_METHOD", $_SERVER)) ( if ($_SERVER["HTTP_X_HTTP_METHOD"] == " DELETE") ( $this->method = "DELETE"; ) else if ($_SERVER["HTTP_X_HTTP_METHOD"] == "PUT") ( $this->method = "PUT"; ) else ( throw new Exception(" Неочакван хедър"); ) ) switch($this->method) ( case "DELETE": case "POST": $this->request = $this->_cleanInputs($_POST); break; case "GET": $ this->request = $this->_cleanInputs($_GET); break; case "PUT": $this->request = $this->_cleanInputs($_GET); $this->file = file_get_contents("php://input"); прекъсване; по подразбиране: $this->_response("Невалиден метод", 405); прекъсване; ) ) публична функция processAPI() ( if (method_exists($this, $this->endpoint)) ( return $this->_response($this->($this->endpoint)($this->args)); ) return $this->_response("Няма крайна точка: $this->endpoint", 404); ) private function _response($data, $status = 200) ( header("HTTP/1.1 " . $status. " " . $this->_requestStatus($status)); върне json_encode($data); ) частна функция _cleanInputs($data) ( $clean_input = Array(); if (is_array($data)) ( foreach ($data като $k => $v) ( $clean_input[$k] = $this->_cleanInputs($v); ) ) else ( $clean_input = trim(strip_tags($data)); ) връща $clean_input; ) частна функция _requestStatus($ код) ( $status = array(200 => "ОК", 404 => "Не е намерен", 405 => "Методът не е разрешен", 500 => "Вътрешна сървърна грешка",); return ($status[$code ])?$статус[$код]:$статус; ) )

Като декларирахме този абстрактен клас, ние попречихме на PHP да създаде конкретно копие на този клас. От там можем да използваме методи само чрез наследяване в друг клас. Защитен метод може да бъде достъпен само в самия клас и неговите наследници.

Създаване на API клас

Ние създаваме MyAPI клас, който наследява абстрактния API клас.

require_once "API.class.php"; клас MyAPI разширява API ( защитен $User; публична функция __construct($request, $origin) ( parent::__construct($request); // Абстрахиран, например $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() ( if ($this->method == "GET") ( return "Вашето име е " . $this->User->name; ) else ( return "Приема само GET заявки"; ) ) )

Използване на API

// Заявките от същия сървър нямат заглавка HTTP_ORIGIN, ако (!array_key_exists("HTTP_ORIGIN", $_SERVER)) ( $_SERVER["HTTP_ORIGIN"] = $_SERVER["SERVER_NAME"]; ) опитайте ( $API = нов MyAPI($_REQUEST["заявка"], $_SERVER["HTTP_ORIGIN"]); echo $API->processAPI(); ) catch (Изключение $e) ( echo json_encode(Array("error" => $e- >getMessage())); )

Неумел превод на това: http://coreymaynard.com/blog/creating-a-restful-api-with-php/

PHP предлага три различни API за свързване с MySQL. По-долу показваме API, предоставени от разширенията mysql, mysqli и PDO. Всеки кодов фрагмент създава връзка към MySQL сървър, работещ на "example.com", използвайки потребителското име "user" и паролата "password". И се изпълнява заявка, за да поздрави потребителя.

Пример #1 Сравняване на трите MySQL API

//mysqli
$mysqli = нов mysqli ("example.com", "потребител", "парола", "база данни");
$резултат = $mysqli -> заявка();
$row = $result -> fetch_assoc();

//ЗНП
$pdo = нов PDO ( "mysql:host=example.com;dbname=база данни", "потребител", "парола");
$statement = $pdo -> заявка ( „ИЗБЕРЕТЕ „Здравей, скъпи потребител на MySQL!“ AS _message FROM DUAL“);
$ред = $изявление -> извличане (PDO::FETCH_ASSOC);
ехо htmlentities($row["_message"]);

// mysql
$c = mysql_connect("example.com", "потребител", "парола");
mysql_select_db("база данни");
$резултат = mysql_query ( „ИЗБЕРЕТЕ „Здравей, скъпи потребител на MySQL!“ AS _message FROM DUAL“);
$row = mysql_fetch_assoc ($result);
ехо htmlentities($row["_message"]);
?>

Препоръчан API

Препоръчително е да използвате разширенията mysqli или PDO_MySQL. Не се препоръчва да се използва старото разширение mysql за нова разработка, тъй като то е остаряло в PHP 5.5.0 и е премахнато в PHP 7. Подробна матрица за сравнение на характеристиките е предоставена по-долу. Общата производителност и на трите разширения се счита за приблизително еднаква. Въпреки че производителността на разширението допринася само за малка част от общото време на изпълнение на PHP уеб заявка. Често въздействието е едва 0,1%.

Сравнение на характеристиките

ext/mysqli PDO_MySQL ext/mysql
Представена е PHP версия 5.0 5.1 2.0
Включен с PHP 5.x да да да
Включен с PHP 7.x да да Не
Състояние на развитие Активен Активен Поддръжка само в 5.x; премахнат в 7.x
Жизнен цикъл Активен Активен Отхвърлено в 5.x; премахнат в 7.x
Препоръчва се за нови проекти да да Не
ООП интерфейс да да Не
Процедурен интерфейс да Не да
поддържа API неблокиращи, асинхронни заявки с mysqlnd да Не Не
Постоянни връзки да да да
API поддържа Charsets да да да
API поддържа подготвени отчети от страна на сървъра да да Не
поддържа API подготвени отчети от страна на клиента Не да Не
API поддържа съхранени процедури да да Не
API поддържа множество изявления да Повечето Не
поддържа API транзакции да да Не
Транзакциите могат да се контролират с SQL да да да
Поддържа цялата функционалност на MySQL 5.1+ да Повечето Не

Често ме питат как да работите с API. Най-популярният проблем, свързан с API, е - работа с API на VKontakte. В тази статия ще покажа как да работите с API на VKontakte, и най-важното, ще ви покажа това всички API работят на един и същ принцип.

Тук процедуракоето трябва да направите, за да започнете да работите с всеки API:

  1. намирам документацияколкото е необходимо API.
  2. Виж Примери за API връзка. Тук може да има различни опции. Например, една услуга ще изисква таен ключ, издаден след регистрация. При втората услуга всички заявки не изискват секретни ключове. На третата услуга има опции за работа със секретен ключ и без. Понякога се извиква секретният ключ жетон.
  3. копие прост готов кодот сайта за документация и проверете работата му. Ако не работи, тогава потърсете грешката сами, тъй като услугата е малко вероятно да има такава.
  4. намирамв документацията метод, което решава вашия проблем.
  5. Използвайки примери и описание на метода, изпрати правилната заявка към API.
  6. В зависимост от формата на отговора, анализирайте го на " компоненти", и след това направете каквото се изисква - покажете го на потребителя, запишете го във файл, изпратете го в базата данни и други подобни.

И като пример за следване на тези инструкции ще разгледаме API на VKontakte. Така:

  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($стена);
?>

В случая използвам API 5.3 (v=5.3), показвам всички записи независимо от автора ( филтър=други) от вашата страница ( домейн=myrusakov) в количество 5 неща ( брой = 5). Мисля, че тук всичко е много прозрачно.

Получихме отговор във формата JSON, а сега трябва да преминем към последната точка - анализиране на отговора на " компоненти". След това ще покажем публикациите от стената в повече или по-малко четлива форма на страницата на нашия уебсайт. Полученото PHP код:

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

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

"; // Показване на записи
}
?>

Както можете да видите, всичко е много просто. Най-трудната част е разбиването му на съставните му елементи. Предпочитам да изведа резултата от APIпрез print_r, и едва след това напишете обработка на това. Въпреки че можете да разгледате примерен отговор в описанието на метода и след това да напишете анализатор.



Свързани публикации