Подтвердить что ты не робот

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

Я пишу API-интерфейс .NET для API Netflix.

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

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

4b9b3361

Ответ 1

Ниже приведена цитата из: Framework Guildelines
Я высоко рекомендую эту книгу всем, кто разрабатывает рамки на .Net

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

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

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

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

Не автоматически перегружает всех членов на основе Uri версией, которая принимает строку.

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

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

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

Можете ли вы прояснить свои пожелания или причины использовать только строки?

Ответ 2

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

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

Ответ 3

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