欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

短url服务java_Serverless-实现一个短网址服务(二)

发布时间:2024/4/14 编程问答 39 豆豆
生活随笔 收集整理的这篇文章主要介绍了 短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-实现一个短网址服务(二)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。