国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

詳解ES6 Fetch API HTTP請求實用指南

2019-11-19 12:30:54
字體:
來源:轉載
供稿:網友

本次將介紹如何使用Fetch API(ES6 +)對REST API的 HTTP請求,還有一些示例提供給大家便于大家理解。

注意:所有示例均在帶有箭頭功能的 ES6中給出。

當前的Web /移動應用程序中的一種常見模式是從服務器請求或顯示某種數據(例如用戶,帖子,評論,訂閱,付款等),然后使用CRUD(創建-Create,閱讀-Retrieve,更新-Update或刪除-Delete)操作。

為了進一步操作資源,我們經常使用這些JS方法(推薦),例如  .map(),  .filter()和  .reduce()。

一下就是我們要解決的問題:

  • 處理JS的異步HTTP請求
  • 什么是AJAX?
  • 為什么要獲取API?
  • 快速介紹Fetch API
  • 獲取API - CRUD示例←好東西!

1.處理JS的異步HTTP請求

JavaScript(JS)的工作原理是最具有挑戰性的部分之一是理解如何處理異步請求,這需要理解promises和回調是如何工作的。
在大多數編程語言中,我們都認為操作按順序(順序)發生。必須先執行第一行才能繼續下一行。這個道理顯而易見,因為這是我們自己就是這么操作或者是工作的,當然你也可以選擇邊聽歌邊寫代碼(O(∩_∩)O哈哈~);

但是使用JS,我們有多個在后臺/前臺運行的操作,并且我們不能在每次等待用戶事件時都凍結一個Web應用程序。

將JavaScript描述為異步可能會產生一些誤導。更準確地說,JavaScript是同步的,并且具有各種回調機制的單線程。

但是有些事情必須按順序發生,否則會導致流程混亂和產生意外結果。出于這個原因,我們可以使用promises和callback來構建它。舉例:在某個操作之前需要驗證用戶憑據才能進行這個操作。

2.什么是AJAX

AJAX代表異步JavaScript和XML,它允許在應用程序運行時通過與Web服務器交換數據來異步更新網頁。簡而言之,它實質上意味著您可以更新網頁的各個部分而無需重新加載整個頁面(URL保持不變的情況下)。

AJAX是一個誤導性的名稱。AJAX應用程序可能使用XML來傳輸數據,但將數據作為純文本或JSON文本傳輸同樣很常見。
- w3shools.com

AJAX一路走來?

許多開發人員對在單頁應用程序(SPA)中擁有所有特性感到非常興奮,但是這也會導致很多異步痛苦!但幸運的是,我們有像Angular,VueJS和React這樣的庫,所以在寫SPA應用的時候會更加簡單和易用。

總的來說,如何平衡重新加載整個頁面或加載部分頁面就顯得非常重要了。

在大多數情況下,頁面重新加載在瀏覽器日益完善的功能下已經表現的非常好了。要是在以前,頁面重新加載需要幾秒鐘(取決于服務器的位置和瀏覽器功能)。但是今天的瀏覽器非常快,所以決定是否執行AJAX或頁面重新加載的區別并不大。
個人的經驗是,在大多數情況下,客戶不關心它是SPA還是額外的頁面重新加載。當然,不要誤會我的意思,我確實喜歡SPA,但我們需要考慮一些權衡,如果我們處理有限的預算和缺乏資源,那么快速解決方案可能是更好的方法。

最后,它實際上取決于用例,但我個人認為SPA需要更多的開發時間和處理一些頭痛的問題(頁面的首次加載),而不是簡單的頁面重新加載。

3.為什么要 Fetch API?

這允許我們對服務器執行聲明性HTTP請求。對于每個請求,它創建一個Promise必須解決的請求才能定義內容類型并訪問數據。

現在,Fetch API的好處在于它完全受JS生態系統的支持,并且也是MDN Mozilla文檔的一部分。最后但并非最不重要的是,它在大多數瀏覽器(IE除外)上開箱即用。從長遠來看,我猜它將成為調用Web API的標準方式。
注意!我很清楚其他HTTP方法,例如使用帶有RXJS的Observable,以及它如何關注訂閱/取消訂閱等方面的內存管理/泄漏。也許這將成為執行HTTP請求的新標準方式,誰知道呢?

無論如何,在本文中我只關注Fetch API,但可能在將來寫一篇關于Observable和RXJS的文章。

4.快速介紹Fetch API

該fetch()方法返回一個Promise解析Response來自Request顯示狀態(成功與否)的方法。如果您promise {}在控制臺日志屏幕中收到此消息,請不要驚慌 - 它基本上意味著Promise工作,但等待解決。因此,為了解決它,我們需要  .then()處理程序(回調)來訪問內容。

所以簡而言之,我們首先定義路徑(Fetch),其次是從服務器請求數據(Request),第三個定義內容類型(Body),最后但并非最不重要的是,我們訪問數據(Response)。

如果你很難理解這個概念,不要慌。您將通過下面顯示的示例獲得更好的概述。

我們將用于示例的路徑

https://jsonplaceholder.typicode.com/users //返回JSON

5.獲取API - HTTP示例

如果我們想要訪問數據,我們需要兩個.then()處理程序(回調)。但是如果我們想要操縱資源,我們只需要一個  .then()處理程序。但是,我們可以使用第二個來確保已發送值。

基本提取API模板

//基于fetch的基本模塊fetch.then(response.something) //定義返回的類型和數據格式.then(data) // 返回的數據

注意!以上示例僅用于說明目的。如果執行它,代碼將不起作用。

  • 獲取API示例
  • 顯示用戶
  • 顯示用戶列表
  • 創建新用戶
  • 刪除用戶
  • 更新用戶

注意!資源不會真正在服務器上創建,但會返回虛假結果來模仿真實服務器。

1.顯示用戶

如前所述,顯示單個用戶的過程包括兩個  .then()處理程序(回調),第一個用于定義對象,第二個用于訪問數據。
請注意,只需閱讀查詢url字符串,/users/2我們就能理解/預測API的作用。這也是rest api 的重要意義之一

例子

fetch('https://jsonplaceholder.typicode.com/users/2') .then(response => response.json()) //定義返回的類型和數據格式 .then(data => console.log(data)) // 返回的數據// 數據示例:// {//   "id": 2,//   "name": "Ervin Howell",//   "username": "Antonette",//   "email": "Shanna@melissa.tv",//   "address": {//    "street": "Victor Plains",//    "suite": "Suite 879",//    "city": "Wisokyburgh",//    "zipcode": "90566-7771",//    "geo": {//     "lat": "-43.9509",//     "lng": "-34.4618"http://    }//   },//   "phone": "010-692-6593 x09125",//   "website": "anastasia.net",//   "company": {//    "name": "Deckow-Crist",//    "catchPhrase": "Proactive didactic contingency",//    "bs": "synergize scalable supply-chains"http://   }// }

2.顯示用戶列表

該示例幾乎與前一個示例相同,只是查詢字符串是/users,而不是/users/2。

例子

fetch('https://jsonplaceholder.typicode.com/users') .then(response => response.json()) //定義返回的類型和數據格式 .then(data => console.log(data)) // 返回的數據// 數據示例:// [//   {//    "id": 1,//    "name": "Leanne Graham",//    "username": "Bret",//    "email": "Sincere@april.biz",//    "address": {//     "street": "Kulas Light",//     "suite": "Apt. 556",//     "city": "Gwenborough",//     "zipcode": "92998-3874",//     "geo": {//      "lat": "-37.3159",//      "lng": "81.1496"http://     }//    },//    "phone": "1-770-736-8031 x56442",//    "website": "hildegard.org",//    "company": {//     "name": "Romaguera-Crona",//     "catchPhrase": "Multi-layered client-server neural-net",//     "bs": "harness real-time e-markets"http://    }//   }// 更多...// ]

3.創建新用戶

這個看起來與前面的例子有點不同。如果熟悉HTTP協議,它給我們提供了很多的方法,如POST,GET,DELETE,UPDATE,PATCH和PUT。這些方法是簡單描述要執行的操作類型的動詞,主要用于操作服務器上的資源/數據。

無論如何,為了使用Fetch API創建新用戶,我們需要使用HTTP謂詞POST。但首先,我們需要在某處定義它。幸運的是,Init我們可以傳遞一個可選參數,用于定義自定義設置的URL,例如方法類型,正文,憑據,標題等。

例子

fetch('https://jsonplaceholder.typicode.com/users',{ method: 'POST',  body: JSON.strignify({   username: '張三',    email: 'elonasdfk@gmail.com',   userId: 1  }),  headers: { 'Content-Type': 'application/json;charset=utf-8'}})

4.刪除用戶

為了刪除用戶,我們首先需要定位用戶/users/1,然后我們定義方法類型DELETE。

例子

fetch('https://jsonplaceholder.typicode.com/users/1',{ methods: 'DELETE'})

5.更新用戶

HTTP謂詞PUT用于操作目標資源,如果要進行部分更改,則需要使用PATCH。

例子

fetch('https://jsonplaceholder.typicode.com/users',{ method: 'PUT',  body: JSON.strignify({   username: '張三',    email: 'elonasdfk@gmail.com',   userId: 1  }),  headers: { 'Content-Type': 'application/json;charset=utf-8'}})

結論

現在,你已基本了解如何使用JavaScript的Fetch API從服務器檢索或操作資源,以及如何處理promise。您可以使用本文作為如何構建CRUD操作的API請求的指南。

就個人而言,我覺得Fetch API是聲明性的,就算沒有任何技術編碼經驗,你也可以很容易地理解發生了什么。以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 绥江县| 湘潭县| 容城县| 东阳市| 会东县| 天长市| 瑞丽市| 天台县| 寿宁县| 江都市| 平湖市| 札达县| 北京市| 方正县| 大连市| 汉寿县| 吉安市| 临汾市| 奇台县| 甘肃省| 内乡县| 镇安县| 乌鲁木齐市| 宕昌县| 凌源市| 云梦县| 开江县| 蒲城县| 天峻县| 蓬安县| 安龙县| 广东省| 沙洋县| 南通市| 诸城市| 手机| 杭州市| 治多县| 康保县| 南和县| 抚州市|