# 第八堂:API 開發流程 ## 開課提醒 1. 錄影 2. [第七週週報](https://liberating-turtle-5a2.notion.site/EP7-746bd0e79d05491dbcaeb419c95774a3?pvs=4) 3. 已公開全部任務,這週提前開放心得牆任務 4. [加碼課程回饋表單](https://docs.google.com/forms/d/e/1FAIpQLSe8iBLNQLNMD-5K66MqSVtsCt4W0Q_UmxKox7NnPGnacGGvfA/alreadyresponded)填寫至今天 5. 中場休息公布完整獎品項目 **10 個任務連結,每通過一個任務增加 10%,共 100 %** - 報到任務 - 第一週任務 - 第二週任務 - 第三週任務 - 第四週任務 - 第五週任務 - 第六週任務 - 第七週任務 - 第九週任務 - JS 直播班心得牆 ## 今日上課知識點 1. API 2. 最終關卡任務 --- ## [API](https://zh.wikipedia.org/wiki/%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E6%8E%A5%E5%8F%A3) 介紹 Application Programming Interface 應用程式介面 透過介面來發網路請求,與伺服器交換資料 **API 文件**:串接API的使用說明書 * [2021 年前端/UI 從業人員現況問卷調查 API](https://github.com/hexschool/2021-ui-frontend-job) * [TDX API](https://tdx.transportdata.tw/data-service/basic) * [NEWS API](https://newsapi.org/) * [Google Map API](https://developers.google.com/maps/documentation/javascript/get-api-key?authuser=2) * [最終任務 API](https://hexschool.github.io/hexschoolliveswagger/) **API KEY 金鑰 / Token 令牌** 某些 API 會需要經過審核才可以串接,因此 API KEY / Token 的設計就是用來通過的鑰匙,實務上通常用於識別和授權使用者權限 送出種類 1. 放在網址上:例如:[Google Map](https://developers.google.com/maps/documentation/javascript/adding-a-google-map#key)、[NEWS API](https://newsapi.org/) 2. 放在 request headers 裡面,例如:[故宮 OPEN DATA API](https://openapiweb.npm.gov.tw/APP_Prog/cht/overview_cht.aspx)、六角最終關卡管理者端 API **API 四種種類** 1. 可以在瀏覽器端(JS)讀取使用,不需申請帳號:[2021 前端工程師薪資資料](https://raw.githubusercontent.com/hexschool/2021-ui-frontend-job/master/frontend_data.json?token=AAQWFQDSNRRXC6FBW7PDSETBOESVW) 2. 可以在瀏覽器端(JS)讀取使用,需要申請帳號獲得金鑰: [Google Map](https://developers.google.com/maps/documentation/javascript/adding-a-google-map#key) 3. 只能在**後端伺服器**讀取,不需申請帳號: [台南旅遊人數](https://data.tainan.gov.tw/dataset/tourists-statis) 4. 只能在**後端伺服器**讀取,需要申請帳號獲得金鑰: [NEWS API](https://newsapi.org/) > response headers 裡面的屬性 Access-Control-Allow-Origin: * **API 複習** * [2021 前端工程師薪資資料](https://raw.githubusercontent.com/hexschool/2021-ui-frontend-job/master/frontend_data.json?token=AAQWFQDSNRRXC6FBW7PDSETBOESVW) * [台南旅遊人數](https://data.tainan.gov.tw/dataset/tourists-statis) * [故宮 OPEN DATA API](http://210.69.170.105/popendata/APP_Prog/cht/overview_cht.aspx) * [最終任務 API](https://hexschool.github.io/hexschoolliveswagger/) 是屬於哪一種? **為什麼有些 API 資料有 ID 資訊?** * 避免資料撞名,以身份證為例子 * 最終關卡有三種 ID * 產品 ID * 購物車 ID * 訂單 ID ## 最終關卡 API 例子 * [API 教學文件](https://www.notion.so/API-8b5b74eb052b451faf28013d76811fac#7598a1040d4f4c4aab5dec30f621d2b8) * [API 申請平台](https://livejs-api.hexschool.io/) * [API 線上測試文件](https://hexschool.github.io/hexschoolliveswagger/) * [最終關卡 XD 設計稿](https://xd.adobe.com/view/a48b8617-4588-4817-9062-b62130dce916-f1d8/) * [codepen 範例程式碼](https://codepen.io/hexschool/pen/JjERgYq?editors=0010) * [API 前台產生訂單的流程圖](https://whimsical.com/Eg1f7MCzy9UcBJjkpq8TLP) 1. 註冊平台帳號 2. 登入平台帳號 3. 申請 api path (要全小寫) 4. 試用 api 文件 5. 沒問題後開始串接 api **步驟一:初始化,取得產品與購物車列表** * [取得產品列表(Get):/api/livejs/v1/customer/{api_path}/products](https://hexschool.github.io/hexschoolliveswagger/#/%E7%94%A2%E5%93%81%E7%9B%B8%E9%97%9C(%E5%AE%A2%E6%88%B6)/get_api_livejs_v1_customer__api_path__products) * [取得購物車列表(Get)::/api/livejs/v1/customer/{api_path}/carts](https://hexschool.github.io/hexschoolliveswagger/#/%E8%B3%BC%E7%89%A9%E8%BB%8A%E7%9B%B8%E9%97%9C(%E5%AE%A2%E6%88%B6)/get_api_livejs_v1_customer__api_path__carts) ``` //取得產品列表(Get):/api/livejs/v1/customer/{api_path}/products { "status": true, "products": [ { "category": "產品分類 (String)", "image": "產品圖片 (String)", "id": "產品ID (String)", "title": "產品名稱 (String)", "origin_price": "產品原始價錢 (Number)", "price": "產品銷售價錢 (Number)" } ] } ``` >新帳號預設購物車會有一筆資料 **步驟二:新增購物車品項,並再次初始化購物車列表** * [加入購物車(POST):/api/livejs/v1/customer/{api_path}/carts](https://hexschool.github.io/hexschoolliveswagger/#/%E8%B3%BC%E7%89%A9%E8%BB%8A%E7%9B%B8%E9%97%9C(%E5%AE%A2%E6%88%B6)/post_api_livejs_v1_customer__api_path__carts) **步驟三:修改購物車狀態(刪除全部、刪除單筆),並再次初始化購物車列表** * [清除購物車內全部產品(DELETE):/api/livejs/v1/customer/{api_path}/carts](https://hexschool.github.io/hexschoolliveswagger/#/%E8%B3%BC%E7%89%A9%E8%BB%8A%E7%9B%B8%E9%97%9C(%E5%AE%A2%E6%88%B6)/delete_api_livejs_v1_customer__api_path__carts) * [刪除購物車內特定產品(DELETE):/api/livejs/v1/customer/{api_path}/carts/{id}](https://hexschool.github.io/hexschoolliveswagger/#/%E8%B3%BC%E7%89%A9%E8%BB%8A%E7%9B%B8%E9%97%9C(%E5%AE%A2%E6%88%B6)/delete_api_livejs_v1_customer__api_path__carts__id_) **步驟四:送出購買訂單,並再次初始化購物車列表** * [送出購買訂單(POST):/api/livejs/v1/customer/{api_path}/orders](https://hexschool.github.io/hexschoolliveswagger/#/%E8%A8%82%E5%96%AE%E7%9B%B8%E9%97%9C(%E5%AE%A2%E6%88%B6)/post_api_livejs_v1_customer__api_path__orders) **步驟五:觀看後台訂單** * [取得訂單列表(GET):/api/livejs/v1/admin/{api_path}/orders](https://hexschool.github.io/hexschoolliveswagger/#/%E8%A8%82%E5%96%AE%E7%9B%B8%E9%97%9C(%E7%AE%A1%E7%90%86%E8%80%85)/get_api_livejs_v1_admin__api_path__orders) * [Codepen 範例](https://codepen.io/hexschool/pen/yLgaBWV?editors=1010) --- ## 本週任務 1. 小組任務 2. 週末任務 在[此連結](https://discord.com/channels/801807326054055996/1306945062206308352/1306945066467725313)簽到自己有練習所有 API 操作,並附上兩張截圖 a. 有[註冊帳號](https://livejs-api.hexschool.io/),並申請個人的網址路徑 b. 有嘗試操作 [swagger 測試文件](https://hexschool.github.io/hexschoolliveswagger/),並 fork [codepen 範例程式碼](https://codepen.io/hexschool/pen/JjERgYq?editors=0010),新增一筆訂單,在後台上有看到一筆訂單資料  
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up