[Azure] Azure Logic App 製作一個簡單的 API ,收 HTTP Request ,製作 HTTP Response ,透過 IP 反查地理位置

2021-01-18

最近都在玩 Azure Logic App ,玩的時候我在想可不可以透過  Azure Logic App 開發一個簡單的 API ,這時候我要有收資料,跟回傳資料的能力,後來玩一下竟然可以也..

這裡面 SAMPLE ,STEP 1. 我自己 POST 到 Azure Logic App 一段 JSON : {"IP":"163.13.202.199"} , STEP2 . 在 Azure Logic App 收到後我會把 IP Parse 出來,STEP 3. 將 IP 透過 GET 傳到網址  http://ip.taobao.com/outGetIpInfo?ip=[IP]&accessKey=alibaba-inc ,之後回拿到一個 JSON 如下 :


{"data":{"area":"","country":"美国","isp_id":"xx","queryIp":"172.67.152.33","city":"旧金山","ip":"172.67.152.33","isp":"XX","county":"","region_id":"US_104","area_id":"","county_id":null,"region":"加利福尼亚","country_id":"US","city_id":"US_1033"},"msg":"query success","code":0}

STEP4.我們把 data.city 的值拿出來後 Response 出去,我們就開始吧..

1. POST 到 Azure Logic Apps 一段 JSON : {"IP":"163.13.202.199"}  ,這時候在 Azure Logic Apps 這邊我們要加入一個 Triggers : HTTP Request

這時候裡面輸入的 是 JSON Schema ,不知道這的朋友 可以參考我這篇文章 使用 NJsonSchema.CodeGeneration.CSharp 製作 JSON Schema + 驗證 JSON ,簡單的說我就是規範 輸入進來的東西一定要 IP 這屬性,並且是 string

2. 將第一步 拿到的 IP ,選擇 HTTP 的 Action , URI 的部分 輸入 http://ip.taobao.com/outGetIpInfo?ip=@{triggerBody()?['IP']}&accessKey=alibaba-inc

其中的意思就是帶入 第一步驟 triggerBody 中的 IP 這個的值

3. 取得 Step2 Response 的值,並且將 data.city 的值拿出來

BODY 的部分為 @{body('QUERYLOCATION')?['data']?['city']} , 這裡面的 QUERYLOCATION 是 STEP2 的 Action 名稱。

存檔後第一個步驟你回拿到一個網址,之後你可以對那網址 POST 資料

var url = "https://prod-16.southeastasia.logic.azure.com:443/workflows/d2ec6e25eefa48038cf8e2f690523ac5/triggers/request/paths/invoke?api-version=2016-10-01&sp=%2Ftriggers%2Frequest%2Frun&sv=1.0&sig=e1tA4EyRytpTQSd9nA1NSEQ00guki1qenTCEtgiTLf8"; var client = new RestClient(); var request = new RestRequest(url, Method.POST); string jsonToSend = "{\"IP\":\"172.67.152.33\"}"; request.AddParameter("application/json; charset=utf-8", jsonToSend, ParameterType.RequestBody); request.RequestFormat = DataFormat.Json; try { var c= client.ExecuteAsPost(request, "POST"); Response.Write(c.Content); } catch (Exception error) { // Log }


這樣就完成了,最後附上 全部的 Azure Logic Apps 程式碼

{ "definition": { "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#", "actions": { "QUERYLOCATION": { "inputs": { "method": "GET", "uri": "http://ip.taobao.com/outGetIpInfo?ip=@{triggerBody()?['IP']}&accessKey=alibaba-inc" }, "runAfter": {}, "type": "Http" }, "Response": { "inputs": { "body": "@body('QUERYLOCATION')?['data']?['city']", "statusCode": 200 }, "runAfter": { "QUERYLOCATION": [ "Succeeded" ] }, "type": "Response" } }, "contentVersion": "1.0.0.0", "outputs": {}, "parameters": {}, "triggers": { "request": { "inputs": { "schema": { "properties": { "IP": { "type": "string" } }, "type": "object" } }, "kind": "Http", "type": "Request" } } }, "parameters": {} }


整體用下來,簡單可用性非常高,如果學會了真的可以打造出 serverless 的 service

reference :

https://docs.microsoft.com/zh-tw/azure/connectors/connectors-native-reqres


當麻許的碎念筆記 2014 | Donma Hsu Design.