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

Интернет-магазин SaaS - API

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

Версия от 15:46, 17 января 2017; 2fox (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

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>';
}