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
Ну когда например пытаешься по REST делать. Изменить сущность - это PUT
рест это не про пост\пут\патч\етц 😄 В данном случае это просто дрочь, чтобы сократить количество урлов для роутера методом разделения операций по типу запроса
The Ant
хуета на постном масле иначе говоря :)
Павел
рест это не про пост\пут\патч\етц 😄 В данном случае это просто дрочь, чтобы сократить количество урлов для роутера методом разделения операций по типу запроса
Ну и про это тоже) там же есть общие правила именования ресурсов и http. методов к ним относящихся . /books, /books/<id>
Кирилл
Всё равно ты в json можешь указать флаг, что ты собираешься сделать - обновить удалить или добавить
Павел
Всё равно ты в json можешь указать флаг, что ты собираешься сделать - обновить удалить или добавить
Да это хоть один URL роут, и все правила в json и роутить экшены на уровне содержимого (json-rpc вроде). Только это уже не rest
Павел
почему это?
Что "почему это" ? Один url с набором экшенов и параметров - это json rpc
The Ant
и? в принципах рест что-то сказано про это?
Павел
и? в принципах рест что-то сказано про это?
Если найдешь какую то офф доку давай посмотрим. Из всякий статей я везде вижу принцип ресурсов: /books /books/<id> /books/<id>/pages И есть у каждого методы http, которые что то значат. Если пихать что угодно и как - то это уже вакханалия. Делать то можно, но есть некоторые стандарты. Но мб я не прав
The Ant
ну и что помешает жсону быть рестом?
Павел
ну и что помешает жсону быть рестом?
Что мешает быть графкл rest по твоему? У тебя выходит всё rest
The Ant
не всё, посмотри вики уже. GQL вполне может быть рест
Павел
не всё, посмотри вики уже. 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, независимо от того что там на уровне апи произошло
Konstantin
Со мной многие не солгасны обычно, но я считаю что если твое апи успешно ответило, пусть и с ошибкой, то http код должен быть 200, независимо от того что там на уровне апи произошло
не, тут я не согласен. это похоже на процедурный код с кодами возврата. если твоя функция завершилась говном, но не кинула исключение, а вернула -1 - это плохо. по крайней мере в пхп, где нету Option с принудительной распаковкой
Юра
Да так и есть. Статус 200, ошибка и код ошибки внутри сообщения
Konstantin
не, это неудобно. удобно когда твой хттп-клиент сам кидает исключение
Юра
в смысле? а 403 и 404?
Смотри. Сервер на нашел твой сервис, 404. Книга не найдена 404. Ты можешь полагаться на этот код?
Юра
О чем говорит 404?
Юра
Это ошибка произошла на уровне транспорта?
Юра
Или может на уровне апи?
Konstantin
если чот пошло не так. банально довольно сложно через систему типов выразить "либо сущность, либо ошибку". по крайней мере через пхпшную. какой тайп-хинт ты напишешь для апи, которое делает GET /users/1? я полагаю : ?User, а не : массив в котором может быть или юзер или ошибка
Юра
Или может на прокси сервере каком-то
Юра
Я к тому что никого почему-то не парит что уровенень выше (REST) лезет в уровень ниже HTTP.
Кирилл
ладно )
ты мне не нравишься
Юра
Обычно в модели OSI верхний уровень не должен лазить в нижний уровень. Это все с теории сетей еще
Юра
но кому-то пришла в голову идея что блин есть же уже статус коды, почему бы их не переиспользовать
Иван
Смотри. Сервер на нашел твой сервис, 404. Книга не найдена 404. Ты можешь полагаться на этот код?
в этом замечании есть логика но урл - это идентификатор целиком, а не частично на транспорте нет разницы, он человекоприятен и бьётся на части или у каждого ресурса просто ууид и всё
Konstantin
модели оси, кстати, тоже не существует. то, о чем сисадминов на собеседованиях спрашивают, слабо коррелирует с действительностью =)
Юра
Я это представляю так http status code: 200, говорит все ок, запрос успешно дошел до апи и успешно вернулся смотрим в пейлоад: {status: "error", my_error_code: 404, reason: "Book not found"}
Юра
И мне как-то не нравится когда смешиваются эти два уровня
Мария
Какая разница, книга не найдена или страница? Логически это страница книги не найдена и логично, что говорим 404