Интернет-магазин SaaS - API — различия между версиями
Материал из wiki.2fox.org
2fox (обсуждение | вклад) |
2fox (обсуждение | вклад) |
||
(не показаны 4 промежуточных версий 1 участника) | |||
Строка 2: | Строка 2: | ||
== Запросы к API == | == Запросы к API == | ||
− | Для того чтобы вызвать метод API, Вам необходимо осуществить GET запрос по протоколу HTTP на указанный URL: | + | Для того чтобы вызвать метод API, Вам необходимо осуществить '''GET''' запрос по протоколу '''HTTP''' на указанный URL: |
<source lang="php"> | <source lang="php"> | ||
− | http://mysite.com/api. | + | http://mysite.com/api.json?action={METHOD_NAME}&api_key={API_KEY} |
</source> | </source> | ||
== Методы == | == Методы == | ||
=== Получение списка категорий === | === Получение списка категорий === | ||
− | Для того чтобы вызвать метод API, Вам необходимо осуществить GET запрос по протоколу HTTP на указанный URL: | + | Для того чтобы вызвать метод API, Вам необходимо осуществить '''GET''' запрос по протоколу '''HTTP''' на указанный URL: |
<source lang="php"> | <source lang="php"> | ||
− | http://mysite.com/api. | + | http://mysite.com/api.json?action=GetCategories&api_key={API_KEY} |
</source> | </source> | ||
Строка 19: | Строка 19: | ||
=== Получение списка товаров === | === Получение списка товаров === | ||
Работа данного метода похожа на работу модуля [[Обработчик шаблонов#.D0.A2.D0.BE.D0.B2.D0.B0.D1.80.D1.8B|товары]] | Работа данного метода похожа на работу модуля [[Обработчик шаблонов#.D0.A2.D0.BE.D0.B2.D0.B0.D1.80.D1.8B|товары]] | ||
− | Для того чтобы вызвать метод API, Вам необходимо осуществить GET запрос по протоколу HTTP на указанный URL: | + | Для того чтобы вызвать метод API, Вам необходимо осуществить '''GET''' запрос по протоколу '''HTTP''' на указанный URL: |
<source lang="php"> | <source lang="php"> | ||
− | http://mysite.com/api. | + | http://mysite.com/api.json?action=GetProducts&api_key={API_KEY} |
</source> | </source> | ||
Данный метод вернет '''json''' объект. Вся информация о категориях продуктов помещена в переменную content | Данный метод вернет '''json''' объект. Вся информация о категориях продуктов помещена в переменную content | ||
− | В качестве дополнительных параметров может быть передана переменная args (предварительно кодирована, например в js это делается с помощью encodeURIComponent). Переменная передается по аналогии с модулем | + | В качестве дополнительных параметров может быть передана переменная '''args''' (предварительно кодирована, например в js это делается с помощью '''encodeURIComponent'''). Переменная передается по аналогии с модулем |
<source lang="php"> | <source lang="php"> | ||
− | http://mysite.com/api. | + | http://mysite.com/api.json?action=GetProducts&api_key={API_KEY}&args=num=15,category=3,category!=5,order=DESC,orderby=id |
+ | </source> | ||
+ | |||
+ | |||
+ | == Простой PHP класс для работы с API == | ||
+ | <source lang="php"> | ||
+ | <?php | ||
+ | |||
+ | class SimpleData{ | ||
+ | |||
+ | const API_KEY = 'ACsmsPZ8mJJ2Gfgdfgdf9JGAPOfqwsH2'; | ||
+ | const URL = 'mysite.com'; | ||
+ | const CACHE_DIR = './cache'; | ||
+ | const CACHE_TIME = 15; | ||
+ | |||
+ | public function __construct(){ | ||
+ | if(!is_dir(self::CACHE_DIR)) | ||
+ | mkdir(self::CACHE_DIR, 0777); | ||
+ | } | ||
+ | |||
+ | public static function GetProducts($args=''){ | ||
+ | $link = 'action=GetProducts&args='.urlencode($args); | ||
+ | return self::GetData($link); | ||
+ | } | ||
+ | |||
+ | public static function GetCategories($args=''){ | ||
+ | $link = 'action=GetCategories'; | ||
+ | return self::GetData($link); | ||
+ | } | ||
+ | |||
+ | private static function GetData($link=''){ | ||
+ | $cacheFile = self::CACHE_DIR . DIRECTORY_SEPARATOR . md5($link); | ||
+ | |||
+ | if (file_exists($cacheFile) && @filemtime($cacheFile) > strtotime('-'.intval(self::CACHE_TIME).' minutes')) { | ||
+ | return json_decode(file_get_contents($cacheFile), 1); | ||
+ | } | ||
+ | |||
+ | $data = self::curl_get_file($link); | ||
+ | |||
+ | if(!is_numeric($data) && !empty($data)){ | ||
+ | file_put_contents($cacheFile, $data); | ||
+ | return json_decode($data, 1); | ||
+ | } | ||
+ | |||
+ | return array(); | ||
+ | } | ||
+ | |||
+ | private static function curl_get_file($link) { | ||
+ | $ch = curl_init(); | ||
+ | curl_setopt($ch, CURLOPT_URL, 'http://'.self::URL.'/api.json?api_key='.self::API_KEY.'&'.$link); | ||
+ | curl_setopt($ch, CURLOPT_HEADER, false); | ||
+ | curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); | ||
+ | curl_setopt($ch, CURLOPT_TIMEOUT, 25); | ||
+ | curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 25); | ||
+ | |||
+ | $otvet = curl_exec($ch); | ||
+ | $errno = curl_errno($ch); | ||
+ | curl_close($ch); | ||
+ | |||
+ | return ($errno == 0 ? $otvet : $errno); | ||
+ | } | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | === Пример использования === | ||
+ | <source lang="php"> | ||
+ | include_once 'SimpleData.php'; | ||
+ | $data = SimpleData::GetProducts('num=5,category=3,category!=5,order=DESC,orderby=id'); | ||
+ | |||
+ | if(isset($data['content']) && is_array($data['content'])){ | ||
+ | echo '<ul>'; | ||
+ | foreach($data['content'] as $product){ | ||
+ | echo '<li> | ||
+ | <a href="'.$data['domain'].$product['link'].'">'.$product['title'].'</a> | ||
+ | </li>'; | ||
+ | } | ||
+ | echo '</ul>'; | ||
+ | } | ||
</source> | </source> |
Текущая версия на 14:46, 17 января 2017
API — набор готовых классов, процедур, функций, структур и констант, предоставляемых приложением или операционной системой для использования во внешних программных продуктах.
Содержание
Запросы к API
Для того чтобы вызвать метод API, Вам необходимо осуществить GET запрос по протоколу HTTP на указанный URL:
http://mysite.com/api.json?action={METHOD_NAME}&api_key={API_KEY}
Методы
Получение списка категорий
Для того чтобы вызвать метод API, Вам необходимо осуществить GET запрос по протоколу HTTP на указанный URL:
http://mysite.com/api.json?action=GetCategories&api_key={API_KEY}
Данный метод вернет json объект. Вся информация о категориях продуктов помещена в переменную content
Получение списка товаров
Работа данного метода похожа на работу модуля товары Для того чтобы вызвать метод API, Вам необходимо осуществить GET запрос по протоколу HTTP на указанный URL:
http://mysite.com/api.json?action=GetProducts&api_key={API_KEY}
Данный метод вернет json объект. Вся информация о категориях продуктов помещена в переменную content
В качестве дополнительных параметров может быть передана переменная args (предварительно кодирована, например в js это делается с помощью encodeURIComponent). Переменная передается по аналогии с модулем
http://mysite.com/api.json?action=GetProducts&api_key={API_KEY}&args=num=15,category=3,category!=5,order=DESC,orderby=id
Простой PHP класс для работы с API
<?php class SimpleData{ const API_KEY = 'ACsmsPZ8mJJ2Gfgdfgdf9JGAPOfqwsH2'; const URL = 'mysite.com'; const CACHE_DIR = './cache'; const CACHE_TIME = 15; public function __construct(){ if(!is_dir(self::CACHE_DIR)) mkdir(self::CACHE_DIR, 0777); } public static function GetProducts($args=''){ $link = 'action=GetProducts&args='.urlencode($args); return self::GetData($link); } public static function GetCategories($args=''){ $link = 'action=GetCategories'; return self::GetData($link); } private static function GetData($link=''){ $cacheFile = self::CACHE_DIR . DIRECTORY_SEPARATOR . md5($link); if (file_exists($cacheFile) && @filemtime($cacheFile) > strtotime('-'.intval(self::CACHE_TIME).' minutes')) { return json_decode(file_get_contents($cacheFile), 1); } $data = self::curl_get_file($link); if(!is_numeric($data) && !empty($data)){ file_put_contents($cacheFile, $data); return json_decode($data, 1); } return array(); } private static function curl_get_file($link) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://'.self::URL.'/api.json?api_key='.self::API_KEY.'&'.$link); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 25); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 25); $otvet = curl_exec($ch); $errno = curl_errno($ch); curl_close($ch); return ($errno == 0 ? $otvet : $errno); } }
Пример использования
include_once 'SimpleData.php'; $data = SimpleData::GetProducts('num=5,category=3,category!=5,order=DESC,orderby=id'); if(isset($data['content']) && is_array($data['content'])){ echo '<ul>'; foreach($data['content'] as $product){ echo '<li> <a href="'.$data['domain'].$product['link'].'">'.$product['title'].'</a> </li>'; } echo '</ul>'; }