2015-03-29 3 views
1

Je joue avec les nouvelles applications API Azure (modèle dans Visual Studio 2013 avec les nouveaux bits du SDK à partir du 24/03/15) et j'aimerais que mon groupe d'interface utilisateur Swagger m'appelle par Version #. Dans mon cas, je suis actuellement en versioning par URI (je me rends compte que les puristes de REST me diront de ne pas le faire - s'il vous plaît n'essayez pas de "corriger mon erreur" ici). Par exemple, je peux avoir ces appels:Comment obtenir Swashbuckle pour que l'interface utilisateur Swagger soit regroupée par version?

http://example.com/api/Contacts <-- "latest" 
http://example.com/api/1/Contacts 
http://example.com/api/2/Contacts 
http://example.com/api/Contacts{id} <-- "latest" 
http://example.com/api/1/Contacts/{id} 
http://example.com/api/2/Contacts/{id} 

Fonctionnellement, cela fonctionne très bien! (Oui, je sais que certains d'entre vous vont grincer des dents.) Désolé, cela blesse vos sentiments.) Cependant, mon problème est avec l'organisation Swagger UI. Par défaut, l'interface utilisateur Swagger les regroupe par le nom du contrôleur (Contacts dans ce cas). Je vois dans le fichier SwaggerConfig.cs que je peux changer ceci:

// Each operation be assigned one or more tags which are then used by consumers for various reasons. 
// For example, the swagger-ui groups operations according to the first tag of each operation. 
// By default, this will be controller name but you can use the "GroupActionsBy" option to 
// override with any value. 
// 
//c.GroupActionsBy(apiDesc => apiDesc.HttpMethod.ToString()); 

Ce que je ne comprends pas comment je peux modifier pour grouper tous les « dernier » ensemble et ensuite tous ensemble v1 puis tous v2 ensemble, etc.

Comment est-ce que je peux faire ceci? S'il faut absolument que j'ajoute le mot "latest" (ou equiv) dans le chemin à la place du numéro de version, alors je peux le faire mais je préférerais ne pas avoir à le faire.

+0

post-scriptum Je sais que Swashbuckle/Swagger supporte d'autres paramètres de versionnage. Si je devais travailler avec d'autres pour aider à rendre cela plus facile/possible/meilleur, veuillez le signaler. – Jaxidian

Répondre

3

Je crois que ce que vous cherchez à faire est de décommenter une ligne quelques lignes ci-dessous que l'on en SwaggerConfig.cs

c.OrderActionGroupsBy(new DescendingAlphabeticComparer()); 

sauf que vous souhaitez modifier le nom de la classe à quelque chose comme ApiVersionComparer (), puis la mettre en œuvre une nouvelle classe:

public class ApiVersionComparer : IComparer<string> 
{ 

    public int Compare(string x, string y) 
    { 
     // Write whatever comparer you'd like to here. 
     // Yours would likely involve parsing the strings and having 
     // more complex logic than this.... 
     return -(string.Compare(x, y)); 
    } 
} 

Si vous avez eu assez de poser cette question, je suis sûr que je peux laisser la mise en œuvre de tri pour vous. :-)

Hope this helps,

Scott