Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 24777|Відповідь: 3

[WebAPI] WebAPI налаштовує формат повернених даних

[Копіювати посилання]
Опубліковано 30.11.2017 11:00:16 | | | |
Нещодавно, при використанні WebAPI, браузер звертається до WebAPI, і за замовчуванням є формат XML, я вважаю, що цей повернутий формат даних має бути налаштовуваним користувачем, дозволяючи серверу повертати формат XML або JSON, замість коду сервера для налаштування!



Хоча серверний код можна налаштувати, я не думаю, що це було початковим задумом WebAPI.

1. Який тип даних WebAPI повертає за замовчуванням — json чи xml?
2. Як змінити тип повернених даних WebAPI
Я використовую браузер IE, щоб запитати, щоб повернені дані були у форматі JSON, а формат даних, повернений Firefox і Chrome, був XML, а потім використовую HttpWebRequest, щоб запитати, щоб повернення було у форматі JSON. Я замислився, чому одна й та сама програма, той самий конфігураційний файл, чому формат вихідних даних різний, навіть якщо за замовчуванням json або xml можна зрозуміти, чому існують різні браузери, а вихідний формат різний, Після деяких досліджень я нарешті зрозумів причину

Після тестування було встановлено, що дані, які повертаються через браузер IE, є json, тоді як Firefox і Chrome — xml, і виявилося, що IE не має типу «application/xml» у порівнянні з Firefox і Chrome при запитах на http. Отже, за замовчуванням дані у форматі json, тоді як Firefox і Chrome надсилають прийнятні xml-типи, тому xml-дані повертаються, і нижче наведено заголовок запиту IE, Firefox і Chrome


Прийняти з'являється лише у розділі Запити

Що це означає: тип медіа, який прийнятний на стороні браузера


Наприклад, Accept: text/html означає, що браузер може приймати тип постбеку з сервера як text/html, що зазвичай називають html-документами

Якщо сервер не може повернути дані типу text/html, сервер повинен повернути помилку 406 (неприйнятно)

Джокер-карта * позначає будь-який тип

Наприклад, Accept: */* означає, що браузер може обробляти всі типи (зазвичай браузер надсилає це серверу)

Наприклад, Accept: text/* означає, що всі підкласи тексту є прийнятними

Accept може підтримувати кілька типів розділень

Наприклад, Прийняти: audio/*; Q=0.2, Audio/BASIC означає, що браузери віддають перевагу аудіо/базовим типам медіа, але якщо такого типу немає, можна використовувати й інші типи аудіо

Тут з'являється q=0.2, що є значенням, що відображає ступінь асоціації, а за замовчуванням значення — один, розташоване від найбільшого до найменшого

Наприклад, Accept: text/plain; q=0.5, текст/html, текст/x-dvi; q=0,8, текст/x-c

Прийнятні пріоритети типу такі:

1) текстовий/html-текст/x-c

2)text/x-dvi

3) текст/простий

q — це значення від 0 до 1, значення q за замовчуванням — 1, а q=0 означає неприйнятне



Нарешті, результати тестів:

БраузерПовернення до форматування  Заголовок прийняти запит
тобтоjsontext/html, application/xhtml+xml, */*
Хромxmltext/html,application/xhtml+xml,application/xml; q=0.9,image/webp,image/apng,*/*; q=0.8
Firefoxxmltext/html,application/xhtml+xml,application/xml; q=0,9,*/*; q=0.8,*/*



Продовжуйте наступні тести

1. Відправляється лише accept:application/json, і результат повертається як json

2. Надсилається лише accept:application/xml, а результат повертає xml

3. Надіслати accept: application/xml та application/json одночасно, і результат повертає json

4. Надіслати accept:application/json та application/xml одночасно, і результат повертає json

5. Змінити пріоритет і одночасно надіслати application/xml. q=1.0,application/json; q=0.9, і результат повертав XML

З цього можна зробити висновок:

Тип повернених даних WebAPI визначається прийняттям заголовка запиту, а тип повернення за замовчуванням — json
1. Якщо ні application/json, ні application/xml не існує, поверніть дані json
2. Коли доступні лише application/json, поверніть дані json
3. Коли доступний лише application/xml, дані XML повертаються
4. Коли одночасно є application/json і application/json, повернений тип даних не має значення для порядку цих двох, якщо вони мають однаковий пріоритет — повертається json, а якщо пріоритет різний — повертається тип з вищим пріоритетом



Прийми головуТип повернення
Application/JSONjson
Application/XMLxml
application/xml,application/jsonjson
Application/JSON, Application/XMLjson
application/xml; q=1.0,application/json; q=1.0json
application/xml; q=0.9,application/json; q=0.9json
application/xml; q=1.0,application/json; q=0.9xml
application/xml; q=0.9,application/json; q=1.0json


Як показано нижче:





Попередній:python3 реалізує горизонтальні таблиці розділення з паралельним доступом
Наступний:.Net MVC реалізує довготривале опитування
Опубліковано 30.11.2017 11:06:08 |
Це дивовижно, я вже стикався з такою ситуацією раніше, але не думав чому
 Орендодавець| Опубліковано 30.11.2017 11:07:36 |
QWERTYU Опубліковано 2017-11-30 11:06
Це дивовижно, я вже стикався з такою ситуацією раніше, але не думав чому

Рекомендується не заохочувати повернення формату XML, оскільки в деяких випадках повернення формату JSON є нормою, а повернення формату XML викликає виняток

Наприклад, якщо повернене значення є об'єктним, формат JSON є нормальним, і XML-формат повернення повідомлятиме про помилку
Опубліковано 25.04.2018 08:50:44 |
Лекція дуже детальна, і є пункти знань, дякую, вони зібрані
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com