Строки или URI в .NET API?

Я пишу API-оболочку .NET для API Netflix.

На этом этапе я могу выбрать представление URL-адресов в виде строк или объектов URI. Мне кажется, что у обоих есть хорошие основания.

Итак, если бы вы использовали API, что бы вы предпочли?

Хотите рассказать о случаях, которые вы могли бы сделать для обоих?

Quantenmechaniker 18.10.2008 14:02
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
11
1
759
3

Ответы 3

Приведенная ниже цитата взята из: Принципы проектирования каркаса
Я высоко рекомендую эту книгу всем, кто разрабатывает фреймворки на .Net.

Do use System.Uri to represent URI / URL data.
(For Parameters, properties, and return values)

System.Uri is a much safer and richer way of representing URIs. Extensive manipulation of URI-related data using plain strings has been shown to cause many security and correctness problems.

Consider providing string-based overloads for most commonly used members with System.Uri parameters.

In cases where the usage pattern of taking a string from a user will be common enough, you should consider adding a convenience overload accepting a string. The string-based overload should be implemented in terms of the Uri-based overload.

Do Not automatically overload all Uri-based members with a version that accepts a string.

Generally, Uri-based APIs are preferred. String-based overloads are meant to be helpers for the most common scenarios. Therefore, you should not automatically provide string-based overloads for all variants of the Uri-based members. Be selective and provide such helpers just for the most commonly used variants.

РЕДАКТИРОВАТЬ (за комментарии): В книге конкретно говорится: «Было показано, что обширные манипуляции с данными, относящимися к URI, с использованием простых строк вызывают множество проблем с безопасностью и правильностью». Я не уверен, какое дополнительное обоснование вам нужно для использования System.Uri / UriBuilder. Кроме того, почему бы вам не воспользоваться фреймворком для чтения / управления URI?

При разработке API, который будет использоваться другими, важно сделать их доступными, а также надежный. По этой причине в книге упоминается, что вы должны предоставить «хорошие» перегрузки для общих функций. Однако для обеспечения корректности вы всегда должны реализовывать базовый код с URI.

Не могли бы вы пояснить свои желания или причины использовать только строки?

Бонусный балл за ссылку на книгу, о которой я не знал до сих пор.

OregonGhost 18.10.2008 15:20

Но почему? Я прочитал книгу, и на самом деле это не оправдывает такое решение.

Jonathan Allen 19.10.2008 04:52

Вы спросите: «Почему бы вам не воспользоваться фреймворком для чтения / управления URI?». Что ж, большинство предоставляемых фреймворком функций для управления URI работают со строкой, а не с System.Uri. Это осознание и вызвало в первую очередь этот вопрос.

Jonathan Allen 19.10.2008 06:35

Я бы сказал, что вы должны представить его как URI. Однако, если я являюсь пользователем вашего API и мне приходится постоянно преобразовывать строковые URL-адреса в URI, чтобы использовать ваш API, то я был бы взбешенным пользователем.

Я говорю о том, что вам нужно оценить, какая аудитория будет использовать ваш API.

Зачем использовать URI? Что это на самом деле дает?

Jonathan Allen 19.10.2008 04:53

Одна вещь, которую я обнаружил, заключалась в том, что при написании методов, принимающих string, мне всегда приходилось инициализировать объект Uri в любом случае только для проверки строки, чтобы UriFormatException затем распространялся из метода, если пользователь передал неверную строку. Но если вы принимаете только Uri, как это сделал я после того, как на меня (справедливо) накричал FxCop, то вы всегда знаете, что ваш ввод действителен - что мне кажется очень хорошим признаком того, что вы правильно проектируете свой API.

Как оказалось, я знаю, что все мои URL-адреса верны, потому что они либо созданы мной, либо переданы мне из надежного источника. Так что, кроме проверки, дает ли это вам что-нибудь на самом деле?

Jonathan Allen 19.10.2008 04:55

Что ж, это дает вам то же самое, что и принятие int, когда вам нужно целое число (в отличие от строки, а затем вызов int.Parse).

Domenic 19.10.2008 16:11

Другие вопросы по теме