Мне нужен API.С чего мне начать? - PullRequest
6 голосов
/ 18 февраля 2011

Я создаю PHP-приложение с нуля (используя фреймворк Kohana3).Я собираюсь спроектировать его так, чтобы я мог использовать API для внутреннего доступа к данным.В то же время я хочу в конечном итоге предложить его публике.

Я планирую использовать метод доступа RESTful.Однако мне трудно найти четкую информацию о том, как правильно защитить API.Другими словами, как мне реализовать подписи и доступ к API?

Ответы [ 6 ]

5 голосов
/ 18 февраля 2011

Вы можете попробовать фрапи . Это быстро позволит вам создать свой RESTful API, который вы затем сможете использовать для своего приложения, и позже публично представить тот же API.

2 голосов
/ 23 февраля 2011

OAuth будет хорошим выбором.Как и одна пара ключ / значение.Возможно, вы захотите взглянуть на Mashape , но не совсем уверены, что оно соответствует тому, что вы пытаетесь сделать.

1 голос
/ 11 апреля 2012

Взгляните на 3scale (http://www.3scale.net/), чтобы сделать это - он обрабатывает аутентификацию, контроль доступа, политики, ограничения скорости и т. Д. И бесплатен для значительного трафика. У нас есть модуль PHP для подключения к системе, чтобы включите эти функции. (Отказ от ответственности - я работаю там, но надеюсь, что это полезно!)

1 голос
/ 18 февраля 2011

Я думаю, что для начала стоит прочитать общую информацию о цифровой подписи.Википедия - отличный ресурс http://en.wikipedia.org/wiki/Public_Key_Infrastructure или http://en.wikipedia.org/wiki/X.509.
На базовом уровне я бы дал каждому клиенту закрытый ключ.В клиентской библиотеке я бы зашифровал ключ.Когда клиент делает запрос, убедитесь, что ключ тот, который вы выдали этому конкретному клиенту.

0 голосов
/ 18 февраля 2011

Ваш вопрос немного больше, чем этот;но я могу предложить одно небольшое замечание о REST.

Я обнаружил с помощью REST, что лучше всего использовать искусственные ключи для базовой модели данных, а не естественные ключи.

Например, рассмотрим URL-адрес RESTfull: https://server/yourApp/viewUser/1234.html, который будет отображать пользователя с идентификатором 1234. Однако, если вы используете естественные ключи, у вас может быть URL-адрес типа https://server/yourApp/viewUser/Bob.html или хуже, если вместо Боба его«Bob X» или «Bob? Key = Value».Вам не нужно думать о создании недействительных URL.

0 голосов
/ 18 февраля 2011

Я создал PHP REST API, используя CodeIgniter с базовой аутентификацией (предоставив «id компании» и «Ключ API» в качестве имени пользователя / пароля). Позже мы обнаружили, что было необходимо предоставить сеансовые ключи, которые были непосредственно связаны с ключом API, только со сроком действия.

По сути, мы запрашивали разные типы данных в нашем хранилище данных (разновидность nosql :) в зависимости от того, какой «метод» был указан в URL. Мы получили доступ к этому с помощью способности «сегмента», предоставляемой CodeIgniter.

Затем мы завернули каждый ответ «json_encode», который был возвращен, и мы также использовали HTTPS-соединение для безопасности.

Для клиентского класса мы обернули все в вызовы, такие как $ client-> get_my_data ($ api_key), со слоем внизу, используя PHP Libcurl, который действительно хорошо работает для обеспечения базовой аутентификации.

Надеюсь, это поможет,

CURL_GET

    private function curl_get($url, $apikey, $co)
    {
        $curl_handle = curl_init();
        curl_setopt($curl_handle, CURLOPT_URL, $url);
        curl_setopt($curl_handle, CURLOPT_CONNECTTIMEOUT, 2);
        curl_setopt($curl_handle, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl_handle, CURLOPT_USERPWD, $co.":".$apikey);
        curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl_handle, CURLOPT_DNS_USE_GLOBAL_CACHE, FALSE);

        $buffer = curl_exec($curl_handle);
        $error = curl_error($curl_handle);
        curl_close($curl_handle);
        // check for success or failure
        if (empty($buffer)) {
        //echo 'Something went wrong :( error: '.$error.'<Br>';
        } else {
        return $buffer;
        }
    }
...