Pull to refresh
375
0

Разрабатываю API более 10 лет

Send message
Это в данном контексте совершенно неважно. Даже если предположить, что авторизации в протоколе нет, ну там юзера по IP-адресу идентифицирует, проблема получения своего идентификатора никак от этого не меняется.
В том, что `GET /me` противоречит концепции REST, а `POST /me` нет.

GET возвращает представление некоторого ресурса. В данном случае произойдёт следующее: серверный код найдёт тот ресурс, который вы реально запросили (пользовательский профиль с некоторым id) и вернёт его как представление ресурса `/me`. Получается, что /me не указывает на некоторую «именованную сущность», как предписывает концепция ресурса.

Для устранения этого противоречия нам надо объявить `/me` специальным ресурсом, функцией которого является сопоставление параметров операции (сессии, в данном случае) с профилем пользователя. Объявив `/me` таким ресурсом, мы по определению должны использовать `POST`, поскольку этот метод как раз нужен для того, чтобы эндпойнт обработал приложенные данные в соответствии со своей внутренней семантикой. А `GET /me` должен возвращать его (ресурса-матчера) представление, которого у него обычно нет. Во всяком случае, представление ресурса-матчера — это какая-то информация о самом ресурсе, вряд ли каким-то образом полезная в обсуждаемом контексте.
Попробуйте сформулировать, что за ресурс me, что должна возвращать операция GET и как это соотносится со stateless-принципом.
Ну, например:

Филдинг-2008: A REST API should not contain any changes to the communication protocols aside from filling-out or fixing the details of underspecified bits of standard protocols

Филдинг-2000: ничего подобного в ограничениях не написано; более того, в разделе 5.1.4 Филдинг пишет «extensions to the protocols were needed in order for them to communicate reliably. The following sections describe the constraints added to the Web's architectural style in order to guide the extensions that form the modern Web architecture», т.е. явно указывает, что расширения протоколов формируют современный веб и должны следовать той же парадигме REST.
Попробуйте сформулировать, что за ресурс me, что должна возвращать операция GET и как это соотносится со stateless-принципом.
В целом же мне не очень понятно, с чем конкретно вы спорите. Сформулируйте, пожалуйста, конкретные тезисы.
> Каким образом клиент узнает свой user_id?

Выполнив запрос `POST /me` (`POST /startup`, `POST /init`, не суть) перед началом работы с API.
> И я не могу понять тезис о разнице между REST и «REST по Филдингу-2008», который гуляет еще с ваших прошлых постов. Какие именно отличия имеются между «REST-2000» и «REST-2008»?

Я в общем-то приложил все усилия, какие смог, чтобы объяснить. REST-2000 оперирует абстрактными ограничениями, типа Hypermedia as an engine of application state, которые можно при желании как объявить выполненными всегда, так и не выполнимыми никогда. Из этого родилось «популярное» толкование REST, как его можно прочитать в многочисленных статьях про REST на Хабре. REST-2008 заявляет, что существует единственно верная интерпретация REST-2000, причём эта интерпретация гораздо ближе к «невыполнима никогда», чем к «выполнена всегда».
> В REST интерфейсы не должны быть «просто стандартизированными». Ограничение Uniform Interface (является центральным) отсылает нас к четырём интерфейсным ограничениям: REST is defined by four interface constraints: identification of resources; manipulation of resources through representations; self-descriptive messages; and, hypermedia as the engine of application state. Ничего не напоминает?

Всё так. Только в разделе 5.2, где Филдинг обещает обсудить эти ограничения, ничего похожего не обсуждается, только повторяются те же самые слова. Трактовать понятия «самоописываемые сообщения» или «гипермедиа как движок состояния приложения» читатель должен сам. Я, впрочем, об этом специально написал: «Дальше Филдинг конкретизирует некоторые аспекты имплементации систем в указанных ограничениях, но все они точно так же являются совершенно абстрактными.»
Я задаю этот терминологический вектор уже более 10 лет, так что вы поздновато решили вмешаться ;)

Если серьёзно, то связность — это математический термин (связность графа), и он сюда подходит как нельзя лучше. Что касается коннотаций, то «сцепка» их несёт никак не меньше.
Смотрится бодро, но
далее спойлеры
по факту является точно таким же филлером, что и четвертый сезон. Сюжет не сдвигается ни на йоту. Как мы обнаружили в конце 4 сезона (1) Марс считает открытие Врат концом своей цивилизации, гейм-чейнджером (2) Инарос полоумный фанатик, претендующий на подчинение всего Пояса — ну вот точно тем же и 5 сезон заканчивается. Все основные герои бессмысленно мечутся туда-сюда с нулевым результатом.

И все проблемы XML автоматически вытекают из его достоинств, да.


Не зависит от форматирования. Кодировка задается в контенте.

Одна проблема — не все клиенты умеют во все кодировки. Соответственно, гарантии переносимости нет.


Include из других файлов.

Который создаёт туеву хучу проблем с безопасностью. Умудриться сделать RCE в языке разметки — это, конечно, вин.


Тэги, атрибуты, mixed content.

Самый, конечно, бессмысленный провал в дизайне языка. Начерта нужны атрибуты отдельно от дочерних нод — Тим Бернерс-Ли его знает. Не могу не отметить, что на значения атрибутов полагаются свои правила эскейпинга.


XML Schema: полная семантика валидации, стандартные типы, кастомные типы, структуры, списки с границами, группы, расширения/сужения, ссылки

Это ж в прямом виде нарушение инкапсуляции.
JSON — типизирован сам по себе. В нём по формату есть числа, строки, true, false и null.
А в XML, если тебе схемы не дали, всё — строка. Нет способа передать число.
А уж какие шикарные приёмы изобретают для отдачи null в xml — это ж просто сказка. Один xsl:nil чего стоит. null-евое значение с атрибутами — как вам концепт?


namespaces.

Нейсмпейсы — главный рак XML-я. Во-первых, опять нарушается инкапсуляция: чтобы написать код, обрабатывающий XML корректно, нужно блин знать все неймспейсы, которые в этом XML будут. Код из-за этого получается переусложнённый и нечитабельный. Впрочем, народ частенько забивает болт на неймспейсы и пишет на local name-ах.


Языки запросов: XQuery, XPath

Придумали проблему и героически её победили.
В 9 из 10 языков программирования я могу написать json_value["field_name"][0]["nested_name"] и не заморачиваться никакими *Path-ами. А если мне зачем-то понадобятся хитровыдуманные выборки — то блин по плоской структуре без атрибутов, неймспейсов и mixed-контентов они работают гораздо удобнее и производительнее.


темплейты XSLT

Как человек, который лет пять писал на XSLT, должен сказать следующее: единственным плюсом этой поделки является гарантия получения валидного XML на выходе. Во всём остальном это невероятно отвратительный язык, который вынуждает изобретать кучу велосипедов (погуглите «как на XSLT выбрать уникальные значения дочерних нод») и практически никак не отлаживается. Ну и да, xsl:variable, который на самом деле нельзя менять — просто возглавляет мой топ самых дурацких именований.


В сухом остатке: XML — невероятно переусложенный формат. Его проблема в том, что он не ложится нативно на структуры языка. Результатом парсинга XML будет объект типа XMLDocument, работа с которым вызывает в основном нравственные страдания. Результатом парсинга JSON будет нативный объект языка.

Gaia — это Гея, древгреческая богиня земли.

Лень читать комментарии, кратенько: автор банально не знает, о чём пишет. Относительно SMS-спама существует отдельное регулирование в законе «О связи», поэтому им действительно будет заниматься ФАС, и есть некоторые шансы «подключить спамеру тариф 100К+».


А вот в отношении спам-звонков никакого регулирования нет. Можно только попробовать пожаловаться в Роскомнадзор на нарушение ФЗ о персональных данных. Звонить перестанут, но вот подвести по какой-то штраф будет крайне проблематично. По факту нужно доказать, что вы отозвали своё согласие на обработку ваших персональных данных (потому что получить ваши ПД законно можно миллионом способов, почти все договоры сейчас содержат оговорку, что ваши ПД могут быть переданы третьим лицам). Я лично вот только что получил отписку от Роскомнадзора, мол, кто-то оставил заявку с вашими ПД, компания действовала добросовестно.


Что касается спама по электронной почте — можно просто забыть, ни одно ведомство им не занимается.

Действительно, пропущен id в ответе search. поправлю, спасибо.

Так вот чтобы никого не оскорблять, должен быть явный пункт «предпочту не говорить» вместо неявного null.

Я, если честно, устал спорить с утверждением «10 десятичных цифр лучше чем 32 шестнадцатеричные». Окей, можете форкнуть репозиторий и исправить в своей копии.

Ну да, очень интересное: str[i..j].chars().count()

thread 'main' panicked at 'byte index 1 is not a char boundary
Прекрасный способ отстрелить себе ногу.


Чтобы работать с utf-8 строками без лишних конвертаций, используя заложенные в utf-8 возможности. Очевидно же.

Да каких конвертаций? Что станет хуже, если str[i] указывает на char, а не byte?

Остаётся только один вопрос — зачем?
В мире нет ни одной реальной задачи, в которой доступ к уникодной строке требуется побайтно. В Расте банально вычислить количество уникодных символов между двумя байтовыми позициями — интересное такое занятие с неопределённым результатом.

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

Information

Rating
Does not participate
Location
Россия
Registered
Activity