Code Monkey home page Code Monkey logo

jackchen1210 / samplecode Goto Github PK

View Code? Open in Web Editor NEW

This project forked from tdxmotc/samplecode

0.0 1.0 0.0 792 KB

交通部為落實智慧運輸政策、加速運輸資料整合與開放,創建「TDX運輸資料流通服務平臺」,期透過Open API服務之整合,建立運輸領域開放資料的單一入口,便利加值業者從單一介面快速獲取所需資料。

Home Page: https://tdx.transportdata.tw

JavaScript 7.70% Python 6.61% PHP 4.08% Java 14.22% R 8.14% C# 36.70% CSS 5.31% HTML 17.25%

samplecode's Introduction

TDX運輸資料流通服務API介接範例程式碼說明

為使開發者能快速在M2M環境下介接使用TDX運輸資料流通服務平臺之交通領域資料服務API,在此提供數種程式語言的範例程式碼提供開發者做參考。

API使用次數限制

TDX API現階段呼叫頻率限制為 每個呼叫來源IP每秒最多50次 (不分API金鑰)
未來導入會員訂閱機制時,將改為使用API Key為單位來做頻率限制 (不同訂閱等級擁有不同的限制次數)。

API認證機制

TDX API皆使用OIDC Client Credentials流程進行身份認證,認證完成後即取得Access Token,將Access Token帶入即可存取TDX API服務。詳細步驟說明如下:

1. 註冊為TDX會員

TDX官網註冊為TDX會員,完成Email驗證、帳號經管理員審核後即可登入TDX網站。

2. 取得API金鑰

登入TDX網站後,於TDX會員中心取得API金鑰(包含Client Id和Client Secret),可視開發測試需求自行建立多組API金鑰(目前開放至多3組)。

3. 取得Access Token

取得Access Token的API為https://tdx.transportdata.tw/auth/realms/TDXConnect/protocol/openid-connect/token,使用HTTP POST方法、帶入Client Id和Client Secret進行驗證以取得Access token。以下為curl範例:

curl --request POST \
     --url 'https://tdx.transportdata.tw/auth/realms/TDXConnect/protocol/openid-connect/token' \
     --header 'content-type: application/x-www-form-urlencoded' \
     --data grant_type=client_credentials \
     --data client_id=YOUR_CLIENT_ID \
     --data client_secret=YOUR_CLIENT_SECRET \

參數說明如下:

參數 描述
grant_type 固定使用"client_credentials"
client_id 您的Client Id,可從TDX會員中心取得
client_secret 您的Client Secret,可從TDX會員中心取得

若帶入的參數正確,可收到HTTP 200回應與訊息:

{
    "access_token": "eyJh...",
    "expires_in": 86400,
    "token_type": "Bearer",
    (...省略其他內容)
}

回傳訊息欄位說明如下:

參數 描述
access_token 用於存取API服務的token,格式為JWT
expires_in token的有效期限,單位為秒,預設為86400秒(1天)
token_type token類型,固定為"Bearer"

待Access Token產生之後,若時間超過有效期限(expires_in參數),需使用Client Id和Client Secret重新取得Access Token。

提醒您,若每次呼叫API時都重新取得Access Token,此作法將會提升程式端與TDX環境的網路與系統運算資源的消耗, 未來TDX也將限制Access Token API的存取次數。為了讓TDX運算資源能更有效與公平的被使用,建議程式端實作Access Token快取機制。 建議做法如下:

  • 方法1: 程式實作自動定期重新取得Token機制,如程式每4小時或6小時重取一次Access Token,每次呼叫API時皆使用該Token。
  • 方法2: 程式取得Access Token之後,將Access Token儲存於記憶體,在每次呼叫API時帶入該Token,若發現Token過期再重新取得Token。

若有任何Access Token API使用方法或Token快取機制的問題,可於Issues留下您的意見,我們將盡快回覆您。

4. 呼叫TDX API服務

呼叫TDX API時將取得的Access Token帶入HTTP Authorization Bearer Header。curl範例如下:

curl --request GET \
     --url TDX_API_URI \
     --header 'authorization: Bearer ACCESS_TOKEN'

呼叫API時,可視需求加入Content-Encoding HTTP Header,可有效減少資料回傳量。呼叫歷史資料類型API時,使用此設定將可大幅降低資料傳輸時間。使用方式如下:

Content-Encoding: br,gzip

其他說明

傳輸加密通訊協定支援狀況

由於TLS 1.0與TLS 1.1已被證實具有安全風險,為確保網路連線機制的安全性,TDX API與網站僅支援TLS 1.2(含)以上之傳輸加密協定。
TLS與Ciphers支援狀況可參考SSL Labs工具檢測後的結果:

image

samplecode's People

Contributors

chiajung-yeh avatar iisi-2205010 avatar itshenrywu avatar tdxmotc avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.