iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 6
2

接下來延續前一天的章節,我們繼續完成Functions的程式開發!

[前情提要]

能從交友網站獲得資料,且自動篩選自己可能有興趣的對象。
篩選完後自動將對象的資料存到資料庫並寄信給我。
在前一篇我們完成範例程式的測試

[工程師交友小工具]

在此範例專案裡面,除了run.csx檔案之外,還有一個function.json的檔案

function.json是用來做什麼的呢?

官方範例的程式碼: function.json 檔案

function.json用來定義functions(函式)的Binding以及其他基本的組態設定。 我們可以bind如何trigger這個函式,以及輸出的類型。

{
  "bindings": [
    {
      "authLevel": "function",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    }
  ],
  "disabled": false
}

除了直接在這個設定檔修改,我們也可以從以下介面進行手動調整

在function.json裡的 "name": "req",會對應到run.csx的HttpRequestMessage req參數

介紹完function.json的使用方式後呢,我們要來實際撰寫一個Functions內的程式碼囉!請跟著以下的範例動手做看看喔!

實際撰寫程式碼

我們現在來撰寫一個程式碼,可以取得POST的body資料
(會員的暱稱[name],及會員的興趣[hobby])

run.csx 檔案

using System;
using System.Net;
using System.Collections.Generic;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
    log.Info("C# HTTP trigger 開始比對興趣");

    string name = "";
    string hobby = "";

    // Get request body
    dynamic data = await req.Content.ReadAsAsync<object>();

    name = data?.name;
    hobby = data?.hobby;

    List<string> hobby_list = hobby.Split(',').ToList();

    //在此預設自己的興趣清單
    List<string> matched_hobbies = new List<string> { "棒球", "游泳", "旅遊" };

    List<string> matched_list = hobby_list.Intersect(matched_hobbies).ToList();

    //找到新加入會員與自己相符的興趣
    string matched_hobby = String.Join(", ", matched_list.ToArray());
    log.Info(matched_hobby);

    return matched_list.Count == 0
        ? req.CreateResponse(HttpStatusCode.OK, "沒有相符的興趣")
        : req.CreateResponse(HttpStatusCode.OK, "新會員" + name + "她的興趣是" + hobby + ", 相符的興趣是"+matched_hobby);
}

在Portal上貼上你的程式碼

針對程式碼進行逐行說明

  • 在這行我們將Bing Http Request Trigger,並回傳Http Response
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
  • 在這行讀取request裡面的內容,並存放至data
dynamic data = await req.Content.ReadAsAsync<object>();
  • 在這行我們暫時先以Hard Code的方式定義自己想比對的興趣,比對新加入會員與自己相符的興趣
List<string> hobby_list = hobby.Split(',').ToList();

List<string> matched_hobbies = new List<string> { "棒球", "游泳", "旅遊" };

List<string> matched_list = hobby_list.Intersect(matched_hobbies).ToList();

string matched_hobby = String.Join(", ", matched_list.ToArray());
log.Info(matched_hobby);
  • 將結果以Http Response回傳
req.CreateResponse(HttpStatusCode.OK, "沒有相符的興趣") 
req.CreateResponse(HttpStatusCode.OK, "新會員" + name + "她的興趣是" + hobby + ", 相符的興趣是"+matched_hobby)

測試運行結果

測試一:使用有相符興趣的會員進行測試,產出結果如下

**結果:新會員小美她的興趣是爬山,閱讀,游泳,棒球,相符的興趣是游泳,棒球

測試二:使用沒有相符興趣的會員進行測試,產出結果如下

**結果:沒有相符的興趣

到這裡我們已經完成簡單的Functions囉!!

實作完覺得今天除了實作也想學點新的知識?

接下來做個小補充,在我們開發Function App時能用以下方式進行開發

開發Function App環境的選擇

選項一:Azure入口網站

適用於打造雛形,實驗等等的

選項二:Visual Studio 2017

地表最強IDE!!!!!! (Pycharm控不要打我啊)
Azure相關的各式整合工具
可以在Local Debug跟測試(有點像AWS Lambda的python-lambda-local)
安裝時記得要勾選Azure相關的option喔!

選項三:Azure Functions 核心工具

MAC開發者也能用!!!!
配合Visual Studio Code開發事半功倍

介紹完開發工具的選擇,當然也要帶著大家實際動手試看看囉!
下一篇將帶大家用地表最強開發工具Visual Studio 2017,開發Azure Functions⚡喔!

快速連結在此:用地表最強開發工具Visual Studio 2017開發Azure Functions


參考


上一篇
[DAY05] (實作)Serverless打造工程師交友小工具-Azure Functions⚡(上篇)
下一篇
[DAY07] 用地表最強開發工具Visual Studio 2017開發Azure Functions⚡
系列文
30天手把手帶你趣學Azure☁️-初學者也能動手實作🙌🏻30

尚未有邦友留言

立即登入留言