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

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

11 голосов
/ 18 октября 2008

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

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

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

Ответы [ 3 ]

17 голосов
/ 18 октября 2008

Цитата ниже: Рамки дизайна Guildelines
Я очень рекомендую эту книгу всем, кто разрабатывает фреймворки на .Net

Используйте System.Uri для представления данных URI / URL.
(Для параметров: свойства и возвращаемые значения)

System.Uri намного безопаснее и богаче способ представления URI. экстенсивный манипулирование данными, связанными с URI, с использованием было показано, что простые строки вызывают много безопасности и правильности проблемы.

Рассмотрим предоставление перегрузок на основе строк для наиболее часто используемых члены с параметрами System.Uri.

В случаях, когда схема использования взятие строки у пользователя будет достаточно распространенным, вы должны рассмотреть добавив удобную перегрузку принимая строку. На основе строки перегрузка должна быть реализована в условия перегрузки на основе Uri.

Do Not автоматически перегружает все элементы на основе Uri версией, которая принимает строку.

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

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

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

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

1 голос
/ 18 октября 2008

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

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

0 голосов
/ 18 октября 2008

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

...