Персональные инструменты

Интернет-магазин SaaS - API — различия между версиями

Материал из wiki.2fox.org

Перейти к: навигация, поиск
 
(не показаны 3 промежуточных версий 1 участника)
Строка 4: Строка 4:
 
Для того чтобы вызвать метод API, Вам необходимо осуществить '''GET''' запрос по протоколу '''HTTP''' на указанный URL:
 
Для того чтобы вызвать метод API, Вам необходимо осуществить '''GET''' запрос по протоколу '''HTTP''' на указанный URL:
 
<source lang="php">
 
<source lang="php">
   http://mysite.com/api.html?action={METHOD_NAME}&api_key={API_KEY}
+
   http://mysite.com/api.json?action={METHOD_NAME}&api_key={API_KEY}
 
</source>
 
</source>
  
Строка 11: Строка 11:
 
Для того чтобы вызвать метод API, Вам необходимо осуществить '''GET''' запрос по протоколу '''HTTP''' на указанный URL:
 
Для того чтобы вызвать метод API, Вам необходимо осуществить '''GET''' запрос по протоколу '''HTTP''' на указанный URL:
 
<source lang="php">
 
<source lang="php">
   http://mysite.com/api.html?action=GetCategories&api_key={API_KEY}  
+
   http://mysite.com/api.json?action=GetCategories&api_key={API_KEY}  
 
</source>
 
</source>
  
Строка 21: Строка 21:
 
Для того чтобы вызвать метод API, Вам необходимо осуществить '''GET''' запрос по протоколу '''HTTP''' на указанный URL:
 
Для того чтобы вызвать метод API, Вам необходимо осуществить '''GET''' запрос по протоколу '''HTTP''' на указанный URL:
 
<source lang="php">
 
<source lang="php">
   http://mysite.com/api.html?action=GetProducts&api_key={API_KEY}  
+
   http://mysite.com/api.json?action=GetProducts&api_key={API_KEY}  
 
</source>
 
</source>
 
Данный метод вернет '''json''' объект. Вся информация о категориях продуктов помещена в переменную content
 
Данный метод вернет '''json''' объект. Вся информация о категориях продуктов помещена в переменную content
Строка 27: Строка 27:
 
В качестве дополнительных параметров может быть передана переменная '''args''' (предварительно кодирована, например в js это делается с помощью '''encodeURIComponent'''). Переменная передается по аналогии с модулем
 
В качестве дополнительных параметров может быть передана переменная '''args''' (предварительно кодирована, например в js это делается с помощью '''encodeURIComponent'''). Переменная передается по аналогии с модулем
 
<source lang="php">
 
<source lang="php">
   http://mysite.com/api.html?action=GetProducts&api_key={API_KEY}&args=num=15,category=3,category!=5,order=DESC,orderby=id
+
   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>';
}