Разработка сайтов, программирование, верстка

Планируете начать работу над новым веб-приложением? В этом уроке мы рассмотрим, как создать API-ориентированное веб-приложение, и объясним, почему это необходимо в современном мульти-платформенном мире .

Введение

API?

Для тех, кто не знаком с термином, API является сокращением от Application Programming Interface(Интерфейс прикладного программирования). Согласно Википедии :

Интерфейс программирования приложений (англ. application programming interface) — набор готовых классов, процедур, функций, структур и констант, предоставляемых приложением (библиотекой, сервисом) для использования во внешних программных продуктах. Используется программистами для написания всевозможных приложений.

API

Визуализация API
Изображение предоставлено https://blog.zoho.com

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

Комментариев(237)

SPL расшифровывается как Standard PHP Library. Это набор классов и интерфейсов для решения стандартных задач на PHP. В основном она состоит из различного рода итераторов. Библиотека доступна по умолчанию, начиная с PHP 5.

Приведу несколько примеров, начнем с класса Traversable. Этот интерфейс показывает что к данному объекту применим foreach. Этот базовый интерфейс нельзя реализовать напрямую, а через интерфейсы IteratorAggregate или Iterator.  

Iterator

Iterator - класс для перебора внутренних параметров. Объявление итератора:

Iterator extends Traversable {
/* Методы */
abstract public mixed current ( void ) // Возвращает объект на который указывает итератор
abstract public scalar key ( void ) // Возвращает текущую позицию итератора
abstract public void next ( void ) // Переход к следующему элементу
abstract public void rewind ( void ) // Возврат к началу
abstract public boolean valid ( void ) // Проверка на доступность объекта, на который указывает итератор
}

Каждый из этих методов должен быть реализовать в классе - потомке, реализуя функционал итератора. Приведу пример:

class myIterator implements Iterator {
    private $position = 0; // Текущая позиция
    // Перечень элементов, именно по нему будет бегать итератор
    private $array = array( 
        "firstelement",
        "secondelement",
        "lastelement",
    );  

    // Конструктор, кэп
    public function __construct() {
        $this->position = 0;
    }
    
    function rewind() {
        var_dump(__METHOD__);
        $this->position = 0;
    }

    function current() {
        var_dump(__METHOD__);
        return $this->array[$this->position];
    }

    function key() {
        var_dump(__METHOD__);
        return $this->position;
    }

    function next() {
        var_dump(__METHOD__);
        ++$this->position;
    }

    function valid() {
        var_dump(__METHOD__);
        return isset($this->array[$this->position]);
    }
}

$it = new myIterator;

foreach($it as $key => $value) {
    var_dump($key, $value);
    echo "\n";
}

Как видно из кода, сначала объявляется класс, в которой существует массив, по которому и будет бегать наш итератор. Потом мы пробегаемся по каждому элементу при помощи foreach. В результате выполнения этого кода, будет выведено следующее:

string(18) "myIterator::rewind"
string(17) "myIterator::valid"
string(19) "myIterator::current"
string(15) "myIterator::key"
int(0)
string(12) "firstelement"

string(16) "myIterator::next"
string(17) "myIterator::valid"
string(19) "myIterator::current"
string(15) "myIterator::key"
int(1)
string(13) "secondelement"

string(16) "myIterator::next"
string(17) "myIterator::valid"
string(19) "myIterator::current"
string(15) "myIterator::key"
int(2)
string(11) "lastelement"

string(16) "myIterator::next"
string(17) "myIterator::valid"

По этому коду можно проследить порядок работы итератора. 

ArrayAccess

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

ArrayAccess {
/* Методы */
abstract public boolean offsetExists ( mixed $offset ) // Существует ли объект с данным ключом.
abstract public mixed offsetGet ( mixed $offset ) // Получение объекта
abstract public void offsetSet ( mixed $offset , mixed $value ) // Присвоение
abstract public void offsetUnset ( mixed $offset ) // Удаление
}

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

Пример:

class obj implements arrayaccess {
    private $container = array();
    public function __construct() {
        $this->container = array(
            "one"   => 1,
            "two"   => 2,
            "three" => 3,
        );
    }
    public function offsetSet($offset, $value) {
        if (is_null($offset)) {
            $this->container[] = $value;
        } else {
            $this->container[$offset] = $value;
        }
    }
    public function offsetExists($offset) {
        return isset($this->container[$offset]);
    }
    public function offsetUnset($offset) {
        unset($this->container[$offset]);
    }
    public function offsetGet($offset) {
        return isset($this->container[$offset]) ? $this->container[$offset] : null;
    }
}

$obj = new obj;

var_dump(isset($obj["two"]));
var_dump($obj["two"]);
unset($obj["two"]);
var_dump(isset($obj["two"]));
$obj["two"] = "A value";
var_dump($obj["two"]);
$obj[] = 'Append 1';
$obj[] = 'Append 2';
$obj[] = 'Append 3';
print_r($obj);

В результате получили:

bool(true)
int(2)
bool(false)
string(7) "A value"
obj Object
(
    [container:obj:private] => Array
        (
            [one] => 1
            [three] => 3
            [two] => A value
            [0] => Append 1
            [1] => Append 2
            [2] => Append 3
        )
)

При правильном использовании поможет вам сделать ваш код лаконичнее и красивее. 

Комментариев(0)

Всегда приятно читать хорошо оформленный и документированный код. Его не только в разы проще читать и понимать, но и на него просто приятно смотреть. Как правило, начинающие программисты леняться документировать свой код в силу тех или иных причин. Сам раньше не документировал. Но после того как пришлось разбираться в чужом сложном и не документированном коде понял, что не документировать код - это страшный эгоизм и издевательство над своими коллегами. Вот будет кто - то читать мой код, когда я с ним уже закончу, и будет громко произносить в мой адрес страшные эпитеты. Поэтому теперь я стараюсь документировать свой код как можно тщательнее. Тем более, что не задокументировав код и вернувшись к нему через некоторое время, опять придется в нем разбираться, потому что уже все забыл.

Одной из преград к документированию кода для меня было то, что я не знал как это правильно делать. Но тут меня выручил замечательный стандарт Docblock. В нем описывается как надо правильно писать комментарии к коду, чтобы он был не только легко читаем человеком, но и понимался различными IDE для формирования всплывающих подсказок. 

Комментариев( 1 )

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

В компонентах Битрикса реализовано разделение логики и представления. Логика реализуется в самом компоненте, а представление через шаблоны. Зачем нужно такое разделение? Чтобы удобнее было разделять данные разных типов и не мешать все в одну кучу. Плюс к тому если, например, одному человеку понадобиться подредактировать какую-то часть шаблона, а другому надо подправить PHP код, то в результате получиться дикий ад. Плюс к тому, разделение PHP, HTML и JavaScript делает код более читаемым и удобным.

Структура папок коспонента Битрикс

Код компонентов лежит в папке /bitrix/components/. Подпапки будут являться пространствами имен. Например в пространстве имен bitrix лежат системные компоненты. Менять их не рекомендуется. Лучше создайте свою папку типа mycompany. Каждая папка в ней будет названием для компонентов битрикса. Теперь рассмотрим структуру папка компонента битрикса. 

Структура компонента Битрикс

Все более-менее понятно из самих названий, но все-таки стоит сделать пояснения.

Комментариев( 0 )

Когда делаешь совсем небольшой сайт так влом бывает заливать какую-то CMS на 3000+ файлов или какой-то фреймворк типа CodeIgniter или Zend. А создать красивую MVC модель все-таки хочется, чтобы не пихать php, html, js в один файл. Нашел в сети видео как раз для этого случая. Автор рассказывает, как сделать такой вот микро шаблон, который можно будет копипастить в такие вот небольшие проекты и допиливать уже свой функционал. 

Исходные коды шаблона

Комментариев( 0 )

Нашел на Хабре:

По просьбам некоторых читателей моих предыдущих статей, я протестировал четыре библиотеки для парсинга HTML-кода:
  • «PHPQuery»
  • «Simple HTML DOM»
  • «Zend DOM Query»
  • «Nokogiri»
Нужно учитывать, что часто HTML-код является невалидным, по-этому для сравнения выбирались только библиотеки, умеющие работать с не валидным кодом.Лучшая библиотека выбиралась из таких критериев как:
  • Скорость
  • Документация
  • Удобство
  • Надёжность

Познавательно. Давно хотел спарсить несколько сайтов для своих нужд. Нашел инструменты :)

Комментариев( 0 )

Интересная статья для начинающих php-разработчиков на Хабре: 

В PHP значения FALSE и NULL и связанные с ними значения отличаются от того, как это обычно в других языках и имеют свои неочевидные особенности.
В статье рассмотрены эти особенности.
Для новичков это может быть полезно для видимости полной картины, для опытных читателей — обновить в памяти, если какой-то ньюанс вылетел из головы.

Источник

Кому то может оказаться полезным. Тролли как всегда недовольны. 

Комментариев( 1 )