Konstantin
в мапу (это так же может бы sparse array) константная
Konstantin
в список в конец/в начало - константная, если есть оптимизации по сохранению head/tail
Юра
Судя по всему массивы в пхп это всегда rb tree
Konstantin
ого, серьезно?
Юра
Да это ordered map, которая обычно делается на rb tree
Konstantin
https://stackoverflow.com/a/2351796
Konstantin
https://www.npopov.com/2012/03/28/Understanding-PHPs-internal-array-implementation.html
Юра
10 лет статье как бы
Юра
Могло поменяться что-то
Konstantin
https://github.com/php/php-src/blob/master/ext/spl/spl_array.c
Юра
Так это наверное SplFixedArray
Konstantin
мне кажется что нет
Юра
Там даже папка spl
Юра
Сомневаюсь что это родной массив
Юра
Короче суть в том что array_push и pop далеко не константнын и не подходят для алгоритмов где на это упор делается
Юра
По сути весь массив получается долден быть переиндексирован
Konstantin
https://github.com/php/php-src/blob/master/ext/spl/spl_fixedarray.c
Konstantin
вот это фиксед
Ban Warn Bot
User Viktor Zavitkov was never warned.
Юра
/getlimits@BanWarnBot
Ban Warn Bot
/getlimits@BanWarnBot
Limits set in this chat:
Kick limit: 2 warnings before kicking.
Ban limit: 3 warnings before banning.
The Ant
хуета на постном масле иначе говоря :)
Павел
Кирилл
Всё равно ты в json можешь указать флаг, что ты собираешься сделать - обновить удалить или добавить
Кирилл
The Ant
Павел
почему это?
Что "почему это" ? Один url с набором экшенов и параметров - это json rpc
The Ant
и? в принципах рест что-то сказано про это?
Павел
и? в принципах рест что-то сказано про это?
Если найдешь какую то офф доку давай посмотрим.
Из всякий статей я везде вижу принцип ресурсов:
/books
/books/<id>
/books/<id>/pages
И есть у каждого методы http, которые что то значат. Если пихать что угодно и как - то это уже вакханалия. Делать то можно, но есть некоторые стандарты. Но мб я не прав
Gleb
Павел
The Ant
Павел
The Ant
ну и что помешает жсону быть рестом?
The Ant
не всё, посмотри вики уже. GQL вполне может быть рест
The Ant
ладно )
Юра
Есть несколько спецификаций по ресту
Юра
Понятно что все это опшионал, но лучше наверное придерживаться хоть какой-то
Gleb
А тут уже и мне интересно посмотреть, если есть ссылочки, можно кинуть?
Юра
Ну например
https://jsonapi.org/
Юра
Но ч не уверен что там прям сказано как именно ты пути должен прописывать
Юра
Скорее всего это на твое усмотрение
Юра
Пути по сути должны отражать то что нужно твоему клиенту
Юра
Если твоему клиенту нужно получать авторов по айди, пишешь authors/124
Если только к привязкуе к книге, пишешь
books/13/authors/125
Юра
Не обязательно оба эндпоинта должны быть
Павел
Павел
Хотя какого, тогда сранивают rest с остальными, например с json-rpc не понятно
Юра
Джсон rpc это немного другое. Это RPC реализованный поверх json )
Иван
https://ru.wikipedia.org/wiki/REST
какая хорошая статья в вики
нихера не понятно
Konstantin
да потому что никто не знает что такое рест, это как ооп. кто-то когда-то что-то описал, а то, как в каком виде сейчас представлено, вообще к изначальной идее слабо относится. это типа как паста про подростковый секс:
Konstantin
Konstantin
с рестом такая же история, надо делать как все и не пытаться апеллировать "а покажи доку", "а покажи спеку". нету спеки, разработка слишком живая область, чтобы такие абстрактные штуки как рест, покрывать спеками. поэтому есть примерное среднее понимание что это такое - операция выражена методами, создание и поиск - это метод над коллекцией, редактирование/чтение/удаление - метод над сущностью. чтения идемпотентны, записи (кроме патча) - нет.
в качестве транспорта стейтлесс (то есть без кук) хттп, адресация к коллекциям/сущностям идет через урл
Konstantin
в общем то, что примерно каждый из вас и знает. пытаться выразить рест через grpc/gql и прочее - ну это не совсем рест в устоявшемся понимании, хотя, несомненно, общие принципы будут и там и там, но давайте отделять мух от котлет
Юра
Обычно еще пытаются стандартизировать http коды ответа, что тоже как мне фигня полная
Иван
Юра
Со мной многие не солгасны обычно, но я считаю что если твое апи успешно ответило, пусть и с ошибкой, то http код должен быть 200, независимо от того что там на уровне апи произошло
Павел
Иван
Юра
Да так и есть. Статус 200, ошибка и код ошибки внутри сообщения
Konstantin
не, это неудобно. удобно когда твой хттп-клиент сам кидает исключение
Юра
в смысле? а 403 и 404?
Смотри. Сервер на нашел твой сервис, 404. Книга не найдена 404. Ты можешь полагаться на этот код?
Юра
О чем говорит 404?
Юра
Это ошибка произошла на уровне транспорта?
Юра
Или может на уровне апи?
Konstantin
если чот пошло не так. банально довольно сложно через систему типов выразить "либо сущность, либо ошибку". по крайней мере через пхпшную. какой тайп-хинт ты напишешь для апи, которое делает GET /users/1? я полагаю : ?User, а не : массив в котором может быть или юзер или ошибка
Юра
Или может на прокси сервере каком-то
Юра
Я к тому что никого почему-то не парит что уровенень выше (REST) лезет в уровень ниже HTTP.
Юра
Обычно в модели OSI верхний уровень не должен лазить в нижний уровень. Это все с теории сетей еще
Юра
но кому-то пришла в голову идея что блин есть же уже статус коды, почему бы их не переиспользовать
Konstantin
модели оси, кстати, тоже не существует. то, о чем сисадминов на собеседованиях спрашивают, слабо коррелирует с действительностью =)
Юра
Я это представляю так
http status code: 200, говорит все ок, запрос успешно дошел до апи и успешно вернулся
смотрим в пейлоад: {status: "error", my_error_code: 404, reason: "Book not found"}
Юра
И мне как-то не нравится когда смешиваются эти два уровня
Мария
Какая разница, книга не найдена или страница? Логически это страница книги не найдена и логично, что говорим 404