前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Serverless-实现一个短网址服务(二)

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

原创
作者头像
Thor
修改于 2020-06-15 02:39:14
修改于 2020-06-15 02:39:14
1.5K00
代码可运行
举报
文章被收录于专栏:云上服务云上服务
运行总次数:0
代码可运行

要点

上一篇 Serverless-实现一个短网址服务(一)实现了一个生成短链接的云函数,这一篇完成后半部分,实现短链接的跳转。主要需要注意的内容有:

  1. 腾讯云函数的API调用中如何读取path中的参数
  2. 腾讯云函数中的集成响应和透传响应的区别

从请求的短链接获取真实url

如前文所属,我们生成的短链接是使用hashids库从整数id生成的,所以获取真实url的过程也非常简单,只需要调用hashids的decode方法就可以获取到原始的整数id,然后用这个作为参数查询数据库获取到真实url

直接贴代码

代码语言:txt
AI代码解释
复制
# -*- 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路径参数读取

我们一般生成短网址后使用的方式是这样的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://域名/{短链接字符串}

比如这样一个短链接:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
http://short.url/zv

zv就是我们生成的短字符串,在腾讯云中要能够使用这种类型的api请求,需要在API网关控制台中对响应的api做如下配置:

然后在云函数中通过如下方式读取参数:

代码语言:txt
AI代码解释
复制
# 这里的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格式后在调用位置解析结构,获取结构内的内容。

样例

https://service-jmhm1hno-1256668370.gz.apigw.tencentcs.com/test/go/zv

绑定上自己的域名之后,就可以实现一个自己的短链接跳转服务了

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Serverless-实现一个短网址服务(一)
将一个长url生成一个短链接是很常见的需求,本文尝试通过serverless的方式来提供这个功能,主要有两部分内容:
Thor
2020/05/23
1.3K0
Serverless-实现bing每日壁纸API(二)
上一篇使用腾讯云的云函数(Serverless-实现bing每日壁纸API(一)),实现了每日定时抓取bing壁纸并保存到数据库的功能,这一篇继续利用云函数实现一个获取bing壁纸列表的api
Thor
2020/05/18
8050
使用 Serverless 创建一个简单的短网址服务
serverless init flask-starter --name url-shortener
donghui
2021/01/06
1.1K0
使用 Serverless 创建一个简单的短网址服务
短网址系统设计
短网址系统负责将某个长网址缩短为一个很短的网址,用户通过访问这个短网址可以重定向到原本的长网址。
大忽悠爱学习
2023/11/02
5480
短网址系统设计
手把手教你造轮子:这个价值100万的短网址微服务,我送给你
网上已经有产品,用着还不错。可是,作为程序员,从零开始造轮子,开发一个属于自己的短网址服务器,这想法amazing!
程序员小助手
2020/04/08
5960
PHP实现长网址与短网址
示例代码下载地址:http://pan.baidu.com/s/1jI9oLxG
兔云小新LM
2020/05/19
4.9K0
云函数 SCF 中 PHP 的一些入门坑
本文来自 Serverless 社区用户「逸笙」投稿 由于云函数 SCF 本身是用 bootstrap.php 来调用我们的入口函数,默认为 index.main\_handler,意思是调用 index.php 文件中的 main\_handler(),所以很多地方写法要有改变。php 一般提供网页服务,所以我主要讲API 网关配合的云函数 SCF。 main_handler(context)函数会传入 2 个参数,首先这 2 个参数是object,需要用->来访问子项,如 $event->{'head
腾讯云serverless团队
2020/07/03
1.1K0
Serverless-实现bing每日壁纸API(一)
serverless函数的开发方式很适合用来实现一些简单的小功能,比如接下来要做的这个,抓取bing搜索的每日壁纸图片,功能非常的简单:
Thor
2020/05/16
9600
如何设计一个短网址系统
网址短链接就是一些长链接的别名,比如 bit.ly, goo.gl, qlink.me,输入这些链接会跳转到对应的长链接。
somenzz
2021/03/24
1.8K0
如何设计一个短链接系统
短链接是一种将长URL地址转换为较短、易于记忆的链接的技术。它通过使用特定的算法或服务将长链接压缩成更短的形式,以便在限制字符长度或需要更简洁的场景下使用。
柯柏技术笔记
2024/01/10
8790
如何设计一个短链接系统
传统框架部署到 Serverless 架构的利与弊
Serverless 是一个比较新的概念、架构,让开发者放弃之前的开发习惯、放弃现有的 Express、Koa、Flask、Django 等框架,无缝转向 Serverless 架构,显然是不可能的,必须得有一段过渡和适应的时间。在这段时间内,开发者需要思考是否可以将现有的框架部署到 Serverless 架构上?如果要部署,如何才能顺利上云呢?
腾讯云serverless团队
2020/06/15
9440
使用 Serverless 进行 AI 预测推理
本文演示如何使用腾讯云的 SCF 无服务器云函数来实现 AI Serving 能力。
腾讯云serverless团队
2018/04/03
8.4K5
【愚公系列】2022年03月 .NET CORE工具案例-短链接服务
短链接,通俗来说,就是将长的URL网址,通过程序计算等方式,转换为简短的网址字符串。
愚公搬代码
2022/03/04
4280
无服务器云函数python实时新闻爬虫(自带api网关)
https://github.com/birdsofsummer/news_spider
用户1348396
2019/08/13
3.7K0
无服务器云函数python实时新闻爬虫(自带api网关)
【云函数SCF】浏览器请求函数URL,实现CORS
云函数可以让业务部署更快速更轻松,对于我来说,部署API非常方便,在以前API网关就担任了HTTP触发器的功能,不过在今年7月,API网关宣布了下架的消息,转而使用TSE云原生网关,不过对于我们业务量不大的用户来说,TSE的价格实在承担不起,而且很多功能也用不上
Ar-Sr-Na
2024/08/31
5101
Serverless实践系列(六):云函数+API,告知天气信息
首先想要说一下,为什么要把云函数与API网关进行结合? 我们通常用云函数SCF写一个函数应用,这个函数应用可能多种多样,例如之前介绍的包括OJ系统的判题功能、通过NLP实现文本摘要功能......那么,怎么把这些功能简单快速的结合到实际项目中,尤其是Web项目中呢?本文通过一个简单的小例子实现云函数SCF与API网关的结合,算作抛砖引玉,希望大家在自己的Web项目中,可以通过SCF+API网关实现更多功能。 任务说明 通过SCF编写一个两个爬虫程序,分别是通过IP地址获得IP归属地信息、通过地址获得天气
腾讯云serverless团队
2019/08/08
1.9K0
Serverless实践系列(六):云函数+API,告知天气信息
入门 Serverless:如何实现 Hello World?
近年来,IT 技术的更新迭代速度非常快,每个时间点都有典型的代表名词以及概念,就目前而言,人工智能领域中的机器学习、深度学习、强化学习等名词和概念就非常热,同时区块链、物联网等技术发展也是异常火热。在云计算领域,有这样一个技术被众多云厂商认为是“风口项目”,甚至可以颠覆现有云计算中的某些格局,为此包括 AWS、谷歌以及腾讯云、阿里云等在内的云厂商,都为此投入了重大人力以及精力进行相关产品建设,它就是 Serverless 技术。 自 2006 年 8 月 9 日,Google 首席执行官埃里克·施密特(E
腾讯云serverless团队
2020/04/09
2.1K1
Serverless 与 Flask 框架结合进行 Blog 开发
随着时间的发展,Serverless 架构越来越火热,其按量付费、弹性伸缩等诸多优质特性,让人眼前一亮,不得不惊叹云计算为我们带来的便利。 本实践通过一个博客系统的开发,和大家简单地体验一下基于 Serverless 架构的博客系统是什么样的。 功能展示 先看一下我们要实现的效果: 一、前台功能 列表页 内容页 二、后台功能 登录功能 列表页 表单页 项目开发 项目开发过程主要就是数据库的增删改查,为了更加适应 Serverless 架构下的项目开发,也为了提高项目的开发效率特总结了相
腾讯云serverless团队
2020/06/03
1.1K0
Serverless实践系列(五):如何将搜索引擎去广告?
现在大部分搜索引擎都有付费推广的内容,我们经常在使用搜索引擎的时候,会被这些付费搜索的东西所干扰,例如,搜索在线编程这个词条:
腾讯云serverless团队
2019/07/25
9180
Serverless实践系列(五):如何将搜索引擎去广告?
鹅厂分布式大气监测系统:以 Serverless 为核心的云端能力如何打造?
导语 | 为了跟踪小区级的微环境质量,腾讯内部发起了一个实验性项目:细粒度的分布式大气监测,希望基于腾讯完善的产品与技术能力,与志愿者们共建一套用于监测生活环境大气的系统。前序篇章已为大家介绍该系统总体架构和监测终端的打造,本期将就云端能力的各模块实现做展开,希望与大家一同交流。文章作者:高树磊,腾讯云高级生态产品经理。 一、前言 本系列的前序文章[1],已经对硬件层进行了详细的说明,讲解了设备性能、开发、灌装等环节的过程。本文将对数据上云后的相关流程,进行说明。 由于项目平台持续建设中,当前已开源信息
腾讯云serverless团队
2020/10/30
7330
推荐阅读
相关推荐
Serverless-实现一个短网址服务(一)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验