the restful practices practice patterns guidelines good designing create best .net api-design

.net - restful - web api architecture best practices



Cadenas o URI en.NET APIs? (3)

Estoy escribiendo una API .NET wrapper para la API de Netflix.

En este punto, puedo elegir representar las URL como cadenas o como objetos URI. Me parece que hay un buen caso para ambos.

Entonces, si estuvieras usando una API, ¿cuál prefieres?


Yo diría que debes representarlo como URI. Sin embargo, si soy un usuario de su API y tengo que convertir continuamente URL basadas en cadenas a URI para usar su API, entonces sería un usuario cabreado.

Lo que estoy diciendo es que necesitas evaluar qué tipo de público consumirá tu API.


Una cosa que encontré fue que mientras escribía métodos de aceptación de string , siempre tenía que inicializar un objeto Uri todos modos solo para validar la cadena, de modo que la UriFormatException se propagara fuera del método si el usuario pasaba una cadena incorrecta. Pero si solo aceptas Uri s, como hice después de que FxCop te gritara (con razón), siempre sabes que tu entrada es válida, lo que para mí parece una muy buena señal de que estás diseñando tu API correctamente.


La siguiente cita es de: Framework Design Guildelines
Recomiendo este libro a cualquiera que esté desarrollando frameworks en .Net

Use System.Uri para representar los datos URI / URL.
(Para parámetros, propiedades y valores devueltos)

System.Uri es una forma mucho más segura y rica de representar URI. Se ha demostrado que la manipulación extensiva de datos relacionados con URI utilizando cadenas simples causa muchos problemas de seguridad y corrección.

Considere proporcionar sobrecargas basadas en cadenas para la mayoría de los miembros usados ​​con los parámetros System.Uri.

En los casos en que el patrón de uso de tomar una cadena de un usuario sea lo suficientemente común, debe considerar agregar una sobrecarga de conveniencia aceptando una cadena. La sobrecarga basada en cadenas debería implementarse en términos de la sobrecarga basada en Uri.

No sobrecargue automáticamente todos los miembros basados ​​en Uri con una versión que acepte una cadena.

En general, se prefieren las API basadas en Uri. Las sobrecargas basadas en cadenas están destinadas a ser ayudantes para los escenarios más comunes. Por lo tanto, no debe proporcionar automáticamente sobrecargas basadas en cadenas para todas las variantes de los miembros basados ​​en Uri. Sea selectivo y proporcione tales ayudantes solo para las variantes más comúnmente usadas.

EDITAR (por comentarios): el libro declara específicamente: "Se ha demostrado que la manipulación exhaustiva de datos relacionados con URI utilizando cadenas simples causa muchos problemas de seguridad y corrección". No estoy seguro de qué justificación adicional desea para usar System.Uri / UriBuilder. Además, ¿por qué no quieres aprovechar el marco para leer / manipular un URI?

Al diseñar una API que será utilizada por otros, es importante hacerla accesible y confiable . Por esta razón, el libro menciona, debe proporcionar sobrecargas "agradables" para la funcionalidad común. Sin embargo, para garantizar la corrección, siempre debe implementar el código subyacente con URI.

¿Puedes aclarar tus deseos o razones para usar solo cadenas?