API相關規範 === ###### tags: `API` `規範` ## 問題 ### 不同的手機是否可以登入同一個OCP帳號? * 不行! * 跟老闆確定! ### 要合併次特店的網站qrcode合併到biz,變成同一個網址 ### 當外部的公司要如何界接我們的系統 exp: 請款單, PayPage * 當需要實做的時後再說.... ### 走API的模式,是否要透過TOKEN做驗證? * 目前無法確定是那個系統來產生TOKEN * 暫訂OCP * 是否以oAuth概念實做? * 確認老闆的想法 * 後台 * 目前確認要做資料移轉的系統,到最後會是統一用OCP登入 * 可以包含以下 * TPM([NFT](https://nft-saas-ui.staging.nftbox.me/zh) SDK看起來可以幫我們實做這一塊) * MFA * Fido * 消費者 * TPM * 生物辨識 * 速度上如何克服? ### Response需要有固定格式包起來嗎? * 格式 ```jsonld= { "code": "string", "dateTime": "string", "msg": "string", "exp": "string", "data": {} | [] } ``` * Code可以定義相關規範嗎? * 可以,但各個服務需各自定義自己的Code的對應表 * A0000 處理成功 ### I18N相關規範以及如何實做? #### 流程: * 您總共花了:amount元 * Android: * <string name="forbidden_permissions">No tiene permiso %s</string> * 開一個GIT i18n的專案 * 要確定每個服務要打包至的位置暫訂FTP * 從固定的翻譯檔到各個語言的翻譯程式是由noon大大來實做 * 每個語言或者服務都要確定自己的翻譯檔案相關的格式,請當回家功課 * 當個別專案要push的時後,要記得再做一次i18n的更新 ### 外連內的流程? ### Client To Server 加密格式? ### 上傳檔案的部分該如何實做? > 可參考GOOGLE檔案上傳下載功能 [參考文件](https://support.google.com/docs/answer/10519333?hl=zh-Hant) * 檔案上傳是否能只有一個API? * 可以,具體實做下次討論 * 新增檔案上傳的格式 - [ ] form body - post - [ ] base64 * 上傳檔案後的回應? - [ ] 連結 * 上傳下載需要加密? * 修改? * 刪除? ## 規範 ### 共識 # Server To Server 需要統一Request Response規格嗎? * 照舊,需要補齊相關文件 ### Client To Server 是否要加密? * 需要 ### 在複合資料下,會偏向多次請求API組合複合資料,還是獨立API取得? * 兩種方式都會存在,但以多次請求API組合複合資料為首要方向 ### 未來有可能會有Server Side Render嗎? > 如果是透過SSR的話,取得List資料就需要先取得"**分頁**"&"**排序**"&"**搜尋**"相關資料。 * 是的,未來要是有SSR,Server Side會將"**分頁**"&"**排序**"&"**搜尋**"相關資料Response出來。 ### 輸入輸出 * API相關的實做規範請盡可能遵循RESTful精神,相關精神包含: * 盡可能使用Http Status Code,以下為常見的Http Status Code: * 200 OK - 請求成功完成並返回請求的資源。 * 201 Created - 在伺服器上成功建立新資源。 * 204 No Content - 請求成功完成,但不需要返回任何內容(例如,用於 DELETE 請求)。 * 400 Bad Request - 請求參數不正確或缺少必要的參數。 * 401 Unauthorized - 請求需要身份驗證,但提供的憑證無效。 * 403 Forbidden - 請求被伺服器拒絕,通常是因為請求者沒有訪問所請求資源的權限。 * 404 Not Found - 請求的資源不存在。 * 405 Method Not Allowed - 請求使用了伺服器不支持的 HTTP 方法。 * 409 Conflict - 請求衝突,通常是因為資源已經存在。 * 500 Internal Server Error - 伺服器遇到了一個意外的錯誤,無法完成請求。 * 盡可能將資源以CRUD做規劃 * 資料的傳輸,請以JSON格式傳輸,JSON規格請參考[ECMA-404](https://www.ecma-international.org/wp-content/uploads/ECMA-404_2nd_edition_december_2017.pdf),範圍包含: * GET * Response Body * POST * Request Body * Response Body * PUT * Request Body * 小駱峰命名,範圍包含: * URL Path param * GET * URL Query * Response Body JSON * POST * URL Query * Request Body JSON * Response Body JSON * PUT * URL Query * Request Body JSON * Response Body JSON * DELETE * URL Query * 請合理使用null,而不是透過預設值當作空資料,何時使用null何時使用預設資料,該部分可以透過討論再來做定義 * 未來要是有非必填的型態,將以當下型態以及null做欄位型態 * 資料型態將劃分為以下兩種規格: * 單一資料型態 * List資料型態 > 單一資料型態 ```jsonld= { "id": 1, "customerName": "test", "customerAge": 1, "customerBirthday": null, } ``` > List資料型態(response) ```jsonld= { "search": { }, "sort": { "startData": "Asc", "age": "Desc", "createAt": "None" }, "pagination": { "totalCount": 100, "perPage": 10, "currentPage": 1 }, "data": [] } ``` > List資料型態(request) ```jsonld= // 當有分頁 { "search": { }, "sort": { "startData": "Asc", "age": "Desc", "createAt": "None" }, "pagination": { "perPage": 10, "currentPage": 1 } } // 當有"沒有"分頁 { "search": { }, "sort": { "startData": "Asc", "age": "Desc", "createAt": "None" }, "pagination": {} } ```