Ohjelmointi

Web-sovellusliittymän versiointi

Sinun tulee aina päivittää Web-sovellusliittymäsi samalla, kun pidät mahdollisimman paljon samaa URI: ta. Kuvittele tilanne, jossa sinulla on Web-sovellusliittymä, joka on käynnissä tuotannossa ja jota käyttäjät kuluttavat. Oletetaan, että tarvitset lisää toimintoja Web-sovellusliittymässä, mutta sinun on pidettävä nykyiset toiminnot ennallaan. Sinulla voi olla muutama käyttäjä, joka tarvitsee edelleen vanhan sovellusliittymän, kun taas toiset tarvitsevat version, jossa on uusia tai laajennettuja ominaisuuksia. Tämä on juuri se, missä Web-sovellusliittymien versiointi tulee pelastamaan.

Voit päivittää Web-sovellusliittymän jollakin seuraavista tavoista:

  1. Käytä URL-osoitteita: Versiotiedot määritetään URL-osoitteessa kyselymerkkijonona.
  2. Käytä mukautettuja pyyntöotsikoita: Ohjaimesi versiotiedot määritetään pyynnön otsikossa, jotta URL-osoitteeseen ei tarvitse tehdä muutoksia.
  3. Käytä Hyväksy otsikot: Hyväksy otsikot määrittelee yleensä mediatyypin ja merkkikoodaukset. Voit välittää Web-sovellusliittymän versiotiedot hyväksymällä otsikot ilman, että sinun tarvitsee muuttaa URL-osoitetta.

Web-sovellusliittymän versiointi URL-osoitteiden avulla

Harkitse seuraavia Web API -ohjaimia, jotka on nimettyTekijätV1Controller ja TekijätV2Controller vastaavasti.

public class AuthorsV1Controller: ApiController

    {

[HttpGet]

julkiset ILukuisat GetAuthors ()

        {

palauta uusi merkkijono [] {"Joydip Kanjilal", "Gerben Wierda"};

        }

    }

public class AuthorsV2Controller: ApiController

    {

[HttpGet]

julkiset ILukuisat GetAuthors ()

        {

palauta uusi merkkijono [] {"Joydip Kanjilal, Intia", "Gerben Wierda, Alankomaat"};

        }

    }

Tämän kuvan yksinkertaistamiseksi olen sisällyttänyt menetelmän nimeltä GetAuthors () jokaisessa ohjaimessa. Sillä aikaa GetAuthors () sisään TekijätV1Controller palauttaa vain tekijänimet, GetAuthors () sisään TekijätV2Controller (uusi versio) palauttaa tekijänimet sekä niiden maiden nimet, joissa kirjoittajat asuvat.

Seuraava koodinpätkä osoittaa, kuinka kaksi ohjainta käyttävät WebApiConfig luokassa.

config.Routes.MapHttpRoute (

nimi: "WebAPIV1",

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

oletusarvot: uusi {controller = "AuthorsV1Controller", action = "GetAuthors", id = RouteParameter.Optional}

            );

config.Routes.MapHttpRoute (

nimi: "WebAPIV2",

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

oletusarvot: uusi {controller = "AuthorsV2Controller", action = "GetAuthors", id = RouteParameter.Optional}

            );

Voit nyt käyttää Web API -menetelmää GetAuthors käyttämällä seuraavaa URL-osoitetta.

// localhost / WebAPI / api / v1 / Tekijät / GetAuthors

Web-sovellusliittymän versiointi pyynnön otsikon avulla

Voit myös ottaa Web-sovellusliittymän version käyttöön pyynnön otsikon avulla. Tämän saavuttamiseksi sinun on otettava käyttöön mukautettu luokka, joka laajentaa DefaultHttpControllerSelector luokassa, sitten ohita Valitse Ohjain omassa luokassa. Huomaa, että DefaultHttpControllerSelector luokka toteuttaa IHttpControllerSelector käyttöliittymä.Valitse Ohjain puhelut GetControllerName sisäisesti ja hyväksyy HttpRequestMessage parametrina.

Seuraava koodinpätkä kuvaa, kuinka voit hakea versiotiedot pyynnön otsikosta.

yksityinen merkkijono GetControllerVersionFromRequestHeader (HttpRequestMessage-pyyntö)

        {

var acceptHeader = request.Headers.Accept;

const string headerName = "Versio";

string controllerVersion = merkkijono.Tyhjä;

jos (request.Headers.Contains (headerName))

            {

controllerVersion = "V" + request.Headers.GetValues ​​(headerName) .First ();

            }

paluuohjainVersion;

        }

Web-sovellusliittymän versiointi hyväksymisotsikon avulla

Seuraava menetelmä näyttää, kuinka voit noutaa Web-sovellusliittymän versiotiedot hyväksymisotsikosta. Menetelmä tarkistaa MIME-tyypin ja palauttaa versiotiedot asianmukaisesti. Jos tulostusmateriaalityyppi ei ole sovellus / Json, oletusversio palautetaan muodossa V1.

yksityinen merkkijono GetControllerVersionFromAcceptHeader (HttpRequestMessage-pyyntö)

        {

var acceptHeader = request.Headers.Accept;

string controllerVersion = merkkijono.Tyhjä;

foreach (var mime in acceptHeader)

            {

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

                {

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

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

paluuohjainVersion;

                }

            }

palauta "V1";

        }

Voit kutsua Web-sovellusliittymän Fiddleriltä siirtämällä hyväksymisotsikon alla esitetyllä tavalla.

Hyväksy: hakemus / json; merkkisarja = utf-8; versio = 2

Seuraava koodiluettelo kuvaa, kuinka voit ohittaa Valitse Ohjain ohjaimen valitsemiseksi dynaamisesti. Huomaa miten GetControllerVersionFromRequestHeader on käytetty. Jos haluat noutaa ohjaimen version hyväksymisotsikosta, sinun tulisi käyttää vipua GetControllerVersionFromAcceptHeader sen sijaan.

public override HttpControllerDescriptor SelectController (HttpRequestMessage request)

        {

yrittää

            {

merkkijono ohjaimen nimi = base.GetControllerName (pyyntö);

var ohjaimet = GetControllerMapping ();

var routeData = pyyntö.GetRouteData ();

merkkijono ohjainVersion = GetControllerVersionFromRequestHeader (pyyntö);

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

HttpControllerDescriptor controllerDescriptor;

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

                {

string message = "Määritettyä pyyntöä URI {0} vastaavaa HTTP-resurssia ei löytynyt";

heittää uusi HttpResponseException (request.CreateErrorResponse (System.Net.HttpStatusCode.NotFound, String.Format (viesti, pyyntö.RequestUri)));

                }

paluu controllerDescriptor;

            }

saalis (poikkeus ex)

            {

heittää uusi HttpResponseException (request.CreateErrorResponse (System.Net.HttpStatusCode.NotFound, String.Format (ex.Message, request.RequestUri)));

            }

        }

Sinun on lisättävä seuraava rivi WebApiConfig-luokan Rekisteröintimenetelmään tukemaan ohjaimen valintaa ajon aikana.

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

Voit nyt testata Web-sovellusliittymää Fiddlerin avulla - käytä Fiddlerin säveltäjä-välilehteä ja anna tarvittaessa URL-osoite ja versiotiedot. Jos haluat käyttää Web-sovellusliittymän ohjaimen versiota 2, sinun on määritettävä Versio: 2 kun kirjoitat pyynnön otsikkotietoja Fiddlerin Säveltäjä-välilehdessä.