Programmēšana

Tīmekļa API versijas versija

Jums vienmēr ir jāpārveido sava Web API versija, vienlaikus saglabājot pēc iespējas vairāk viena un tā paša URI. Iedomājieties situāciju, kad jums ir Web API, kas darbojas un darbojas ražošanā un ko patērē lietotāji. Tagad pieņemsim, ka Web API ir nepieciešama lielāka funkcionalitāte, tomēr esošā funkcionalitāte jāsaglabā neskarta. Jums var būt daži lietotāji, kuriem joprojām ir nepieciešama vecā API, bet citiem būs nepieciešama versija ar jaunām vai paplašinātām funkcijām. Tieši šeit palīdz Web API versijas.

Varat versiju Web API vienā no šiem veidiem:

  1. Izmantot vietrāžus URL: informācija par versiju ir norādīta URL kā vaicājuma virkne.
  2. Izmantot pielāgotas pieprasījuma galvenes: informācija par jūsu kontroliera versiju ir norādīta pieprasījuma galvenē, norādot nepieciešamību veikt jebkādas izmaiņas URL.
  3. Izmantojiet Accept Headers: Apstiprināt galvenes parasti nosaka multivides tipu un rakstzīmju kodējumus. Informāciju par Web API versiju varat nodot, pieņemot galvenes, nemainot URL.

Tīmekļa API versiju veidošana, izmantojot vietrāžus URL

Apsveriet šādus Web API kontrollerus, kuri ir nosauktiAutori V1Kontrolieris un AutoriV2Controller attiecīgi.

public class AuthorsV1Controller: ApiController

    {

[HttpGet]

public IEnumerable GetAuthors ()

        {

atgriezt jaunu virkni [] {"Joydip Kanjilal", "Gerben Wierda"};

        }

    }

publiskās klases AuthorsV2Controller: ApiController

    {

[HttpGet]

public IEnumerable GetAuthors ()

        {

atgriezt jaunu virkni [] {"Joydip Kanjilal, INDIA", "Gerben Wierda, Nīderlande"};

        }

    }

Lai vienkāršotu šo ilustrāciju, esmu iekļāvis metodi ar nosaukumu GetAuthors () katrā kontrolierī. Kamēr GetAuthors () iekšā Autori V1Kontrolieris atgriež tikai autoru vārdus, GetAuthors () iekšā AutoriV2Controller (jaunā versija) atgriež autoru vārdus kopā ar to valstu nosaukumiem, kurās autori dzīvo.

Šis koda fragments parāda, kā abi kontrolieri izmanto WebApiConfig klasē.

config.Routes.MapHttpRoute (

nosaukums: "WebAPIV1",

routeTemplate: "api / v1 / {controller} / {id}",

noklusējumi: new {controller = "AuthorsV1Controller", action = "GetAuthors", id = RouteParameter.Optional}

            );

config.Routes.MapHttpRoute (

nosaukums: "WebAPIV2",

routeTemplate: "api / v2 / {controller} / {id}",

noklusējumi: new {controller = "AuthorsV2Controller", action = "GetAuthors", id = RouteParameter.Optional}

            );

Tagad varat izmantot Web API metodi GetAuthors izmantojot šo URL.

// localhost / WebAPI / api / v1 / Autori / GetAuthors

Tīmekļa API versijas, izmantojot pieprasījuma galveni

Varat arī ieviest Web API versijas, izmantojot pieprasījuma galveni. Lai to panāktu, jums jāievieš pielāgota klase, kas paplašina DefaultHttpControllerSelector klasē, pēc tam ignorējiet SelectController savā pielāgotajā klasē. Ņemiet vērā, ka DefaultHttpControllerSelector klase īsteno IHttpControllerSelector interfeiss.SelectController zvani GetControllerName iekšēji un pieņem HttpRequestMessage kā parametru.

Šis koda fragments parāda, kā no pieprasījuma galvenes var izgūt informāciju par versiju.

privāta virkne GetControllerVersionFromRequestHeader (HttpRequestMessage pieprasījums)

        {

var acceptHeader = request.Headers.Accept;

const string headerName = "Versija";

string controllerVersion = virkne. Tukšs;

ja (request.Headers.Contains (headerName))

            {

controllerVersion = "V" + pieprasījums.Headers.GetValues ​​(headerName). First ();

            }

atgriešanās kontrolierisVersija;

        }

Tīmekļa API versijas, izmantojot galveni accept

Šī metode parāda, kā no galvenes akceptēt var iegūt informāciju par Web API versiju. Metode pārbauda MIME tipu un atbilstoši atgriež informāciju par versiju. Ja apdrukājamā materiāla tips nav pieteikums / json, noklusējuma versija tiek atgriezta kā V1.

privāta virkne GetControllerVersionFromAcceptHeader (HttpRequestMessage pieprasījums)

        {

var acceptHeader = request.Headers.Accept;

string controllerVersion = virkne. Tukšs;

foreach (var mime in acceptHeader)

            {

if (mime.MediaType.Equals ("pieteikums / json"))

                {

NameValueHeaderValue version = mime.Parameters.FirstOrDefault (v => v.Name.Equals ("Versija", StringComparison.OrdinalIgnoreCase));

controllerVersion = "V" + version.Value.ToString ();

atgriešanās kontrolieris Versija;

                }

            }

atgriešanās "V1";

        }

Jūs varat izsaukt savu Web API no Fiddler, nododot apstiprinājuma galveni, kā parādīts zemāk.

Pieņemt: pieteikums / json; charset = utf-8; versija = 2

Šis kodu saraksts parāda, kā jūs varat ignorēt SelectController lai dinamiski izvēlētos kontrolieri. Ievērojiet, kā GetControllerVersionFromRequestHeader ir izmantots. Ja vēlaties ielādēt kontroliera versiju no galvenes accept, jums vajadzētu izmantot GetControllerVersionFromAcceptHeader tā vietā.

publiski ignorēt HttpControllerDescriptor SelectController (HttpRequestMessage pieprasījums)

        {

mēģiniet

            {

string controllerName = base.GetControllerName (pieprasījums);

var kontrolieri = GetControllerMapping ();

var routeData = pieprasījums.GetRouteData ();

virknes controllerVersion = GetControllerVersionFromRequestHeader (pieprasījums);

controllerName = String.Format ("{0} {1}", controllerName, controllerVersion);

HttpControllerDescriptor controllerDescriptor;

if (! kontrolleri.TryGetValue (controllerName, out controllerDescriptor))

                {

string message = "Netika atrasts HTTP resurss, kas atbilst norādītajam pieprasījuma URI {0}";

mest jaunu HttpResponseException (request.CreateErrorResponse (System.Net.HttpStatusCode.NotFound, String.Format (ziņojums, request.RequestUri)));

                }

atgriešanās kontrolierisApraksts;

            }

nozveja (izņēmums ex)

            {

mest jaunu HttpResponseException (pieprasījums.CreateErrorResponse (System.Net.HttpStatusCode.NotFound, String.Format (piemēram, Ziņojums, pieprasījums.RequestUri)));

            }

        }

Lai sniegtu atbalstu kontroliera izvēlei izpildlaika laikā, WebApiConfig klases reģistrēšanas metodē jāpievieno šāda rinda.

config.Services.Replace (typeof (IHttpControllerSelector), jauns ControllerSelector ((config)));

Tagad varat izmantot Fiddler, lai pārbaudītu savu tīmekļa API - izmantojiet Fiddler komponenta cilni un pēc vajadzības norādiet informāciju par URL un versiju. Ja vēlaties, lai tiktu izsaukta Web API kontroliera 2. versija, jums jānorāda Versija: 2 sastādot pieprasījuma galvenes informāciju Fiddler cilnē Komponists.

$config[zx-auto] not found$config[zx-overlay] not found