短url服务java_Serverless-实现一个短网址服务(二)
要點
上一篇 Serverless-實現一個短網址服務(一)實現了一個生成短鏈接的云函數,這一篇完成后半部分,實現短鏈接的跳轉。主要需要注意的內容有:
騰訊云函數的API調用中如何讀取path中的參數
騰訊云函數中的集成響應和透傳響應的區別
從請求的短鏈接獲取真實url
如前文所屬,我們生成的短鏈接是使用hashids庫從整數id生成的,所以獲取真實url的過程也非常簡單,只需要調用hashids的decode方法就可以獲取到原始的整數id,然后用這個作為參數查詢數據庫獲取到真實url
直接貼代碼
# -*- coding: utf8 -*-
from os import getenv
from hashids import Hashids
import json
from serverless_db_sdk import database
def main_handler(event, context):
# 讀取請求參數
if "requestContext" not in event.keys():
return {"errorCode": 410, "errorMsg": "event is not come from api gateway"}
request = event["requestContext"]
# 云函數的API調用中的path參數是這么讀取的
hash = event['pathParameters']['hash']
hashid = Hashids(salt="bangbangbang")
# decode得到id
auto_id = hashid.decode(hash)[0]
print(auto_id, hash)
# 用id從數據中查詢url
result_data = []
sql_template = """SELECT url FROM bing.short_url where id = %s """
connection = database("BING").connection(autocommit=False)
try:
cursor = connection.cursor()
cursor.execute(sql_template, (auto_id))
result = cursor.fetchone()
url = result[0]
finally:
connection.close()
#因為要返回302消息,需要按照騰訊云的定義的集成響應的格式來返回
return {
"isBase64Encoded": False,
"statusCode": 302,
"headers": {"Location": url}
}
復制代碼
重點解釋
path路徑參數讀取
我們一般生成短網址后使用的方式是這樣的:
http://域名/{短鏈接字符串}
比如這樣一個短鏈接:
short.url/zv
zv就是我們生成的短字符串,在騰訊云中要能夠使用這種類型的api請求,需要在API網關控制臺中對響應的api做如下配置:
然后在云函數中通過如下方式讀取參數:
# 這里的hash是前面配置的參數名
hash = event['pathParameters']['hash']
復制代碼
集成響應和透傳響應
簡單來說透傳響應只會返回200狀態碼,將返回的內容作為消息體透傳給前端,所以一般的返回json數據的函數調用可以直接使用此方式。
集成響應則可以自行定義返回的http狀態碼,消息頭等等內容,我們這里是一個短網址的跳轉,需要返回302或者301消息,所以必須使用集成響應的方式。
具體可以參見騰訊云官方文檔的解釋:
集成響應,是指 API 網關會將云函數的返回內容進行解析,并根據解析內容構造 HTTP 響應。
通過使用集成響應,可以通過代碼自主控制響應的狀態碼、headers、body內容,可以實現自定義格式的內容響應,例如響應 XML、HTML、JSON 甚至 JS 內容。
在使用集成響應時,需要按照 API 網關觸發器的集成響應返回數據結構,才可以被 API 網關成功解析,否則會出現 {"errno":403,"error":"Invalid scf response format. please check your scf response format."} 錯誤信息。
透傳響應,是指 API 網關將云函數的返回內容直接傳遞給API請求方。
通常這種響應的數據格式直接確定為JSON格式,狀態碼根據函數執行的狀態定義,函數執行成功即為 200 狀態碼。
通過透傳響應,用戶可以自行獲取到JSON格式后在調用位置解析結構,獲取結構內的內容。
樣例
service-jmhm1hno-1256668370.gz.apigw.tencentcs.com/test/go/zv
綁定上自己的域名之后,就可以實現一個自己的短鏈接跳轉服務了
關于找一找教程網
本站文章僅代表作者觀點,不代表本站立場,所有文章非營利性免費分享。
本站提供了軟件編程、網站開發技術、服務器運維、人工智能等等IT技術文章,希望廣大程序員努力學習,讓我們用科技改變世界。
[Serverless-實現一個短網址服務(二)]http://www.zyiz.net/tech/detail-134543.html
總結
以上是生活随笔為你收集整理的短url服务java_Serverless-实现一个短网址服务(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java如何创建一个两个数的队列_jav
- 下一篇: mysql 压缩表_MySQL Inno