Ответы пользователя по тегу API
  • Апгрейд Phalcon 1.x до 2.x стал потреблять всю ОЗУ – как обойти?

    Yeah
    @Yeah
    В рамках вот этого пулл-реквеста добавлена проверка на видимость полей через Reflection. В 1.3.2 такой функциональности не было, потому и работало быстро.

    Что характерно, версия 1.x использовала для этого метод getModelsMetadata, который возвращал данные о полях (которые, к слову, еще и кешировал), а в 2.x это убрали и добавили тупое обращение к Reflection. Для production-ready high-speed фреймворка - это дичайший зашквар.

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

    Еще можно переопределить __set в своем базовом классе модели. Что-то типа:

    public function __set($property, $value) {
        if (is_array($value) || is_object($value)) {
            return parent::__set($property, $value);
        }
        if ($this->_possibleSetter($property, $value)) {
            return $value();
        }
        $this->{$property} = $value;
        return $value();
    }


    Но это на свой страх и риск, так как валидность свойств проверяться не будет.

    Ну и пишите им issue, конечно
    Ответ написан
  • PUT & POST при написании API

    Yeah
    @Yeah
    Кратко: POST — создание, PUT — обновление
    Авторитетного источника применительно к REST не будет, так как REST, строго говоря, не определяет ни POST, ни PUT. REST просто допускает использование HTTP. Следовательно наиболее авторитетный источник по поводу POST/PUT — это спецификация HTTP 1.1:

    The POST method is used to request that the origin server accept the entity enclosed in the request as a new subordinate of the resource identified by the Request-URI in the Request-Line.

    The PUT method requests that the enclosed entity be stored under the supplied Request-URI.

    То есть POST используется для создания подчиненной сущности, а PUT для сохранения сущности.
    POST в случае успеха всегда должен возвращать статус 201 (Created) и Location на новый ресурс.
    PUT же может возвращать как 201 (если ресурс не найден), так и 204 (No Content) — если ресурс обновлялся.
    Ответ написан