Hiljuti, kui kasutan WebAPI-d, pääseb brauser WebAPI-le ligi ja vaikimisi on XML-formaat, arvan, et see tagastatud andmeformaat peaks olema kasutaja poolt kohandatav, võimaldades serveril tagastada XML-i või JSON-formaadi, mitte serverikoodi seadistamiseks!
Kuigi serverikoodi saab seadistada, ei usu ma, et see oli WebAPI algne eesmärk.
1. Millist andmetüüpi WebAPI vaikimisi tagastab, json või xml? 2. Kuidas muuta WebAPI tagastusandmete tüüpi Kasutan IE brauserit, et paluda, et tagastatud andmed oleksid JSON-formaadis, ja Firefoxi ning Chrome'i poolt tagastatud andmeformaat on XML, ning siis kasutan HttpWebRequesti, et paluda, et tagastus oleks JSON-formaat, mõtlesin, miks on sama programm, sama konfiguratsioonifail, miks on väljundandmete formaat erinev, isegi kui vaikimisi on väljund json või xml mõistetav, miks on erinevad brauserid, väljundformaat on erinev, Pärast mõningast uurimist sain lõpuks põhjuse välja
Pärast testimist leiti, et IE brauseri kaudu tagastatav info on json, Firefoxi ja Chrome'i puhul xml, ning leiti, et IE-l puudub "rakendus/xml" tüüp võrreldes Firefoxi ja Chrome'iga, kui esineb http-päringuid. Vaikimisi on json-formaadis andmed, samas kui Firefox ja Chrome saadavad vastuvõetavaid xml-tüüpe, seega tagastatakse xml-andmed, ja järgmine on IE, Firefoxi ja Chrome'i päringute päis
Nõustu ilmub ainult Taotlustes
Mida see tähendab: Meedia tüüp, mis on brauseripoolel aktsepteeritav
Näiteks Accept: text/html tähendab, et brauser võib aktsepteerida serveri postbacki tüüpi tekstina/html-ina, mida tavaliselt nimetatakse html-dokumentideks
Kui server ei suuda tagastada teksti/html-tüüpi andmeid, peaks server tagastama 406 vea (vastuvõetamatu).
Wildcard * tähistab mistahes tüüpi
Näiteks Accept: */* tähendab, et brauser suudab hallata kõiki tüüpe (tavaliselt saadab brauser selle serverile)
Näiteks Accept: text/* tähendab, et kõik teksti alamklassid on aktsepteeritavad
Accept võib toetada mitut tüüpi lahutusi
Näiteks aktsepteeri: audio/*; q=0.2, audio/basic tähendab, et brauserid eelistavad audio/basic meediatüüpe, kuid kui neil seda tüüpi pole, saab kasutada ka teisi helitüüpe
Siin ilmub q=0,2, mis tähistab seose astet ning vaikimisi väärtus on üks, mis on paigutatud suurimast väikseimani
Näiteks Aktsepteeri: tekst/plain; q=0.5, tekst/html, tekst/x-dvi; q=0.8, tekst/x-c
Aktsepteeritavad tüübiprioriteedid on järgmised
1) tekst/html tekst/x-c
2)tekst/x-dvi
3) tekst/lihtne
q on väärtus vahemikus 0–1, q vaikimisi väärtus on 1 ja q=0 tähendab mitteaktsepteeritavat
Lõpuks testitulemused:
| brauser | Tagasi vormindamise juurde | Accept request päis | | ehk | json | tekst/html, rakendus/xhtml+xml, */* | | Kroom | xml | text/html,application/xhtml+xml,application/xml; q=0.9,image/webp,image/apng,*/*; q=0.8 | | Firefox | xml | text/html,application/xhtml+xml,application/xml; q=0,9,*/*; q=0.8,*/* |
Jätka järgmiste testidega
1. Saadetakse ainult accept:application/json ja tulemus tagastatakse json
2. Ainult accept: application/xml saadetakse ja tulemus tagastab xml
3. Saada accept: application/xml ja application/json samaaegselt ning tulemus tagastab json
4. Saada samaaegselt accept:application/json ja application/xml ning tulemus tagastab json
5. Muuda prioriteeti ja saada rakendus/xml samaaegselt. q=1.0,application/json; q=0.9 ja tulemus tagastas xml
Sellest võib järeldada:
WebAPI tagastusandmetüüp määratakse päringu päise aktsepteerimise järgi ning vaikimisi tagastustüüp on json 1. Kui ei ole olemas ei application/json ega application/xml, tagastage json andmed 2. Kui saadaval on ainult rakendus/json, tagasta json andmed 3. Kui saadaval on ainult rakendus/xml, tagastatakse xml andmed 4. Kui rakendus/json ja rakendus/json on samaaegselt, siis tagastatud andmetüüp ei ole nende järjekorra suhtes oluline; kui mõlemal on sama prioriteet, tagastatakse json ja kui prioriteet on erinev, tagastatakse kõrgema prioriteediga tüüp
| Võta pea vastu | Tagastustüüp | | Rakendus/JSON | json | | Rakendus/XML | xml | | application/xml,application/json | json | | application/json,application/xml | json | | application/xml; q=1.0,application/json; q=1.0 | json | | application/xml; q=0.9,application/json; q=0.9 | json | | application/xml; q=1.0,application/json; q=0.9 | xml | | application/xml; q=0.9,application/json; q=1.0 | json |
Nagu allpool näidatud:
|