<del id="d4fwx"><form id="d4fwx"></form></del>
      <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

            <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
          • 靜態(tài)網(wǎng)站如何利用云函數(shù)SCF+API網(wǎng)關(guān)訪(fǎng)問(wèn)自定義后端接口

            靜態(tài)網(wǎng)站如何利用云函數(shù)SCF + API網(wǎng)關(guān)訪(fǎng)問(wèn)自定義后端接口,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。

            創(chuàng)新互聯(lián)專(zhuān)注為客戶(hù)提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站建設(shè)、成都網(wǎng)站制作、漳縣網(wǎng)絡(luò)推廣、小程序設(shè)計(jì)、漳縣網(wǎng)絡(luò)營(yíng)銷(xiāo)、漳縣企業(yè)策劃、漳縣品牌公關(guān)、搜索引擎seo、人物專(zhuān)訪(fǎng)、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供漳縣建站搭建服務(wù),24小時(shí)服務(wù)熱線(xiàn):18982081108,官方網(wǎng)址:www.jbt999.com

            小編介紹使用全靜態(tài)頁(yè)面的網(wǎng)站如何利用SCF+API服務(wù)實(shí)現(xiàn)簡(jiǎn)單的后端接口,并提供了一個(gè) Python 出題器的實(shí)例演示。

            相關(guān)服務(wù)介紹:

            云函數(shù)(Serverless Cloud Function,SCF)是騰訊云為企業(yè)和開(kāi)發(fā)者們提供的無(wú)服務(wù)器執(zhí)行環(huán)境,幫助您在無(wú)需購(gòu)買(mǎi)和管理服務(wù)器的情況下運(yùn)行代碼。 API 網(wǎng)關(guān)(API Gateway)是 API 托管服務(wù),提供 API 的完整生命周期管理,包括創(chuàng)建、維護(hù)、發(fā)布、運(yùn)行、下線(xiàn)等。

            前幾天為我家小盆友用 Python 寫(xiě)了個(gè)簡(jiǎn)單的自動(dòng)數(shù)學(xué)題出題器,小家伙十分好奇,隔三差五的就要來(lái)讓我演示一番 。只是每次都要拿本出來(lái)輸命令給他看實(shí)在有些麻煩,于是想著能不能加個(gè)前端頁(yè)面調(diào)用,直接打開(kāi)頁(yè)面就能看到運(yùn)行效果。

            作為一個(gè)行動(dòng)派派,我目標(biāo)鎖定了用 SCF+API的方式,也就是現(xiàn)在很????的 serveless 方案。最大的好處當(dāng)然是不用再伺候服務(wù)器了,少了很多搭建的麻煩。而且這個(gè)按實(shí)際使用量計(jì)費(fèi),對(duì)于小網(wǎng)站再適合不過(guò)了。

            下面介紹下要怎么實(shí)現(xiàn)了。首先,你要有個(gè)騰訊云賬號(hào),然后參考????的簡(jiǎn)單步驟:

            1. 創(chuàng)建云函數(shù) SCF。

            2. 創(chuàng)建 API Gateway,后臺(tái)指定調(diào)用步驟 1 建好的云函數(shù)。

            3. API gateway中 新建密鑰,使用計(jì)劃,實(shí)現(xiàn)訪(fǎng)問(wèn)控制并發(fā)布。

            4. 寫(xiě)前端頁(yè)面,調(diào)用剛寫(xiě)好的 API。

            5. 測(cè)試,解決各種 bug,大功告成!


            創(chuàng)建云函數(shù) SCF

            照著這個(gè)文檔 云函數(shù)快速入門(mén) 按里面的步驟來(lái)創(chuàng)建自己業(yè)務(wù)函數(shù)。第一次可以選擇使用控制臺(tái)創(chuàng)建函數(shù),運(yùn)行環(huán)境中選擇自己熟悉的編程語(yǔ)言,當(dāng)前支持 python, php, golang, java, nodejs幾種,然后就可以在函數(shù)代碼下愉快的開(kāi)始了。這里以運(yùn)行環(huán)境 Python3.6為例。默認(rèn)的入口函數(shù)是 index.main_handler,有兩個(gè)輸入?yún)?shù):

            • event:可以獲取觸發(fā)源的消息 - 主要用來(lái)獲取傳入?yún)?shù)。

            • context:可以獲取本函數(shù)的環(huán)境及配置信息。

            不清楚參數(shù)里有什么的,或怎么用的,可以直接打印出來(lái)看看,都是 dict 類(lèi)型,一目了然。建議加上傳入?yún)?shù)檢查和限制,畢竟我們不知道調(diào)用接口的人會(huì)傳些什么奇怪的東西。返回類(lèi)型包裝成 json 格式,對(duì)前端調(diào)用更友好。給出改好的代碼????:

            # -*- coding: utf8 -*-
            import sys, getopt, random
            import json
            def main_handler(event, context):
                print("Received event: %s" % event)
                print("Received context: %s" % context)
                params = event["queryString"]
                return auto_cal_generator(int(params["limit"]), int(params["op_count"]), params["op_type"].split(","), int(params["total"]))
            
            def auto_cal_generator(limit=100, op_count=1, op_type=["+"], total=100):
                if limit>999 or op_count>9 or total>99:
                    return "exceed max input limit"
                res = {}
                res["msg"] = "Here are today's %d works, good luck!" % total
                questions = []
                l = len(op_type)-1
                for j in range(0, total):
                    up = limit
                    question = ""
                    for i in range(0, op_count+1):
                        num = 0
                        if i == 0:
                            num = random.randint(1,max(1,min(limit,up)))
                            question = "%s%d" % (question, num)
                            up -= num
                            continue
                        op = "+"
                        if limit - up > 0:
                            op_i = random.randint(0,l)
                            op = op_type[op_i]
                        question = "%s%s" % (question, op)
                        if op =="+":
                            num = random.randint(1,max(1,min(limit,up)))
                            up -= num
                        elif op == "-":
                            num = random.randint(1,max(limit-up, 1))
                            up += num
                        else:
                            print("operator error: %s" % op)
                            sys.exit(1)
                        question = "%s%d" % (question, num)
                    questions.append("%d: %s=" % (j+1, question))
                res["questions"] = questions
                return json.dumps(res)

            寫(xiě)完 code 后當(dāng)然不能忘了最重要的測(cè)試工作,代碼輸入框下就是測(cè)試的入口,需要?jiǎng)?chuàng)建測(cè)試模板。系統(tǒng)已經(jīng)預(yù)置了好幾種模板類(lèi)型,直接拿來(lái)改成你需要的就好。我們用 API Gateway 事件模板為原型修改剛寫(xiě)好的出題器的測(cè)試模板。由于我們 code 獲取的是 event 里的 queryString,這里只用修改里面的 queryString 這塊:

            "queryString": {
              "op\_type" : "+,-",
              "op\_count" : 2,
              "limit":100,
              "total":10
             },

            創(chuàng)建完測(cè)試模板后,點(diǎn)擊左側(cè)測(cè)試,瞬間返回結(jié)果:

            返回結(jié)果
            "{\"msg\": \"Here are today's 10 works, good luck!\", \"questions\": \"1: 76-4-44=\", \"2: 52-42+67=\", \"3: 95+4-50=\", \"4: 84-78-1=\", \"5: 29-20-9=\", \"6: 19+37+38=\", \"7: 93-53+57=\", \"8: 80+7+7=\", \"9: 90-74-11=\", \"10: 7+34+52=\"}"

            結(jié)果下方還有執(zhí)行摘要執(zhí)行日志,方便調(diào)試。

            創(chuàng)建 API Gateway

            云函數(shù) SCF 寫(xiě)完后,如果想要能通過(guò)網(wǎng)絡(luò) http(s) 請(qǐng)求直接訪(fǎng)問(wèn),就要為其添加觸發(fā)方式為 API 網(wǎng)關(guān)觸發(fā)器。同時(shí)強(qiáng)烈建議將鑒權(quán)方法置為 API 網(wǎng)關(guān)密鑰對(duì)。然后就會(huì)在 API Gateway 下自動(dòng)創(chuàng)建出一個(gè)對(duì)應(yīng)的 service API。這一步如果遇到權(quán)限問(wèn)題無(wú)法自動(dòng)創(chuàng)建 API 的話(huà),也不要著急,可以直接在 API gateway 的控制臺(tái)操作。

            參考:API 網(wǎng)關(guān)快速入門(mén)。

            創(chuàng)建 API 時(shí)注意將鑒權(quán)類(lèi)型改成密鑰對(duì)。下方有個(gè)支持CORS的選項(xiàng),如果需要跨域訪(fǎng)問(wèn)就勾上,反之可以忽略。設(shè)置完需要接收的參數(shù)后,在下一步的后端配置中選后端類(lèi)型為 cloud function后,選中剛建好的云函數(shù),就做好了這兩者的關(guān)聯(lián)。

            建好 API 后,來(lái)到對(duì)應(yīng)服務(wù)下的管理 API標(biāo)簽就能看到剛建好的 API。在列表的右側(cè)有調(diào)試入口,千萬(wàn)不要忘了點(diǎn)進(jìn)去做下測(cè)試。測(cè)試完成后,再到服務(wù)頁(yè)完成發(fā)布,這樣 API 就可以被訪(fǎng)問(wèn)到了。

            訪(fǎng)問(wèn)控制

            然后,就來(lái)到了相當(dāng)重要但也容易被忽略的訪(fǎng)問(wèn)控制這步。在前面我們已經(jīng)選擇了密鑰對(duì)的方式作為鑒權(quán)類(lèi)型。雖然有密鑰泄露的風(fēng)險(xiǎn),但對(duì)于小網(wǎng)站來(lái)說(shuō)這個(gè)驗(yàn)證也是足夠了,記得保存好密鑰并定期修改就好。

            之后的步驟就是創(chuàng)建密鑰對(duì),創(chuàng)建使用計(jì)劃綁定密鑰對(duì),再把使用計(jì)劃綁定服務(wù)或 API。下面直接甩出文檔:使用計(jì)劃。使用計(jì)劃中除了可以綁定密鑰對(duì),還可以進(jìn)行流量控制,可按需設(shè)置。

            前端調(diào)用

            配置完后端服務(wù)后,要解決的就是訪(fǎng)問(wèn)的問(wèn)題了。由于沒(méi)錢(qián)供服務(wù)器,用的是靜態(tài)頁(yè)面托管的方式建的站。前端直接 ajax 訪(fǎng)問(wèn) API 來(lái)獲取結(jié)果。參考文檔在此:密鑰對(duì)認(rèn)證,如何生成簽名(里面給出了用不同語(yǔ)言生成簽名的例子)。

            由于沒(méi)寫(xiě)前端好多年,對(duì)前端的認(rèn)知還停留在 js 和 jquery 階段,這里只能給出改好的 jquery 寫(xiě)法。用的是 crypto-js 加密。

            //<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js"></script>
            
            function getHeader(){
            	var nowDate = new Date();
            	var dateTime = nowDate.toGMTString();
            	var SecretId = '****';
            	var SecretKey = '****';
            	var source = 'your_source';
            	var auth = "hmac id=\"" + SecretId + "\", algorithm=\"hmac-sha1\", headers=\"x-date source\", signature=\"";
            	var signStr = "x-date: " + dateTime + "\n" + "source: " + source;
            	var sign = CryptoJS.HmacSHA1(signStr, SecretKey)
            	sign = CryptoJS.enc.Base64.stringify(sign)
            	sign = auth + sign + "\""
            	var header = {"Source": source , "X-Date": dateTime , "Authorization":sign}
            	return header
            }
            
            function getQ(){
            	$.ajax({
            		url: "https://xxxx/xx",
            		type: "get",
            		data:{
            			"op_count" : 1,
            			"op_type" : "+,-",
            			"limit" : 100,
            			"total" : 10
            		},
            		dataType: "json",
            		crossDomain: true,
            		headers: getHeader(),
            		success: function (data) {
            			if (data.errorCode < 0){
            				//deal function error: data.errorMessage
            				return
            			}
            			data= $.parseJSON(data);
            			//show result in page
            		},
            		error: function(jqXHR, textStatus, errorThrown){
            			//deal api error
            		}
            	})
            }

            如果在前面創(chuàng)建 API gateway 的 service 時(shí)候沒(méi)有指定自定義域名,或是自定義域名和調(diào)用頁(yè)面的域名不是同一個(gè),就會(huì)涉及到跨域的問(wèn)題。解決跨域問(wèn)題傳統(tǒng)的方法可以用 jsonp。但它沒(méi)辦法在 request 的 Header 里加參數(shù),也就傳不了鑒權(quán)所需的字段。所以這里只能用 CORS來(lái)解決跨域:

            對(duì)于服務(wù)端,只要前面建 API 的時(shí)候勾選了支持 CORS選項(xiàng),就會(huì)自動(dòng)開(kāi)啟,參考 API 控制臺(tái)相關(guān)問(wèn)題 。對(duì)于客戶(hù)端,在 ajax 參數(shù)中設(shè)置 crossDomain: true 就可以了。

            完成

            最后,解決一下頁(yè)面上的 bug,測(cè)試通過(guò)后就大功告成了!

            看完上述內(nèi)容,你們掌握靜態(tài)網(wǎng)站如何利用云函數(shù)SCF + API網(wǎng)關(guān)訪(fǎng)問(wèn)自定義后端接口的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

            網(wǎng)頁(yè)標(biāo)題:靜態(tài)網(wǎng)站如何利用云函數(shù)SCF+API網(wǎng)關(guān)訪(fǎng)問(wèn)自定義后端接口
            文章位置:http://www.jbt999.com/article20/jsdgjo.html

            成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)手機(jī)網(wǎng)站建設(shè)、域名注冊(cè)、品牌網(wǎng)站設(shè)計(jì)網(wǎng)站收錄、網(wǎng)站制作

            廣告

            聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:[email protected]。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

            外貿(mào)網(wǎng)站建設(shè)

              <del id="d4fwx"><form id="d4fwx"></form></del>
              <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

                    <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
                  • 国产拍拍拍 | 亚洲欧美一区二区三区久本道 | 成人在线大香蕉视频 | 久久嫩草精品久久久久 | 久久九|