构建 URL 缩短器只是为了好玩,不赚钱!
这是一个有趣的全栈项目工作日晚上的项目,我在做这个项目的过程中学到了很多东西,并很乐意与大家分享这个过程!
当开始任何项目时,我们都应该通过 SDLC 开始工作,以最大限度地提高生产力并最大限度地减少浪费的时间。
第一阶段 - 规划
问:我们想要构建什么?
答:URL 缩短器。
问:为什么?
A:这是一个有趣的项目!
第二阶段 - 分析
问:这是人们会使用的东西吗?
答:当然!有很多,但这个是我的。
问:存在滥用的可能性吗?
答:是的,必须考虑缓解措施。
问:我担心货币化吗?
答:没有那么多。
第三阶段——设计
让我们思考一下,我们希望用户进入我们的页面后,获得什么样的体验 (UX)。我希望这能简单易行。
前端
我选择了一种非常简单的谷歌风格设计,并使用了设计模型工具,最终得到了类似这样的效果。
后端
后端是此应用程序的主力,它有两个主要任务。
- 缩短链接
- 取消缩短链接
def shorten(val):
# Take a "long" value and return a "short" value
pass
def unshorten(val):
# Take a "short" value and return its corresponding "long" value
pass
我们所有的数据都将存储在数据库中,为了达到我们的目的,我选择使用 SQLite,不过对于此实现,任何能够为每个条目设置唯一主键的数据库都可以。如果您想使用其他方法,请自行决定。对于我们的短网址,我们只希望包含有效的非特殊字符;大小写字母 az,AZ 和数字 0-9。这为我们提供了 62 个字符(即 base62)的键空间;我们的数据库仅使用数字(即 base10)。
太棒了!重担完成了!
长到短 => base10 -> base62
短到长 => base62 -> base10
from baseconvert import base
def shorten(val):
# Take a "long" value and return a "short" value
return base(val, 10, 62, string=True)
def unshorten(val):
# Take a "short" value and return its corresponding "long" value
return base(val, 62, 10, string=True)
使用 Flask 添加一些 API 端点
from flask import Flask
import sqlite3
app = Flask(__name__)
db = sqlite3.connect('file.db')
@app.route('/add', methods=['POST']):
def add_url():
# Add url to database & get ID
row_id = db.add(url).lastrowid
# shorten
short_id = shorten(row_id)
# return to user
return short_id
@app.route('/<string:shortURL>', methods=['GET']):
def get_url(shortURL):
# lengthen row id value (shortURL)
row_id = unshorten(shortURL)
# get url from database
row = db.get(row_id)
# return to user
return row['url']
我们已经设计出了主要部分并编写了一些伪代码;现在是时候进入下一阶段了!
第四阶段 - 实施
我的代码没有公共仓库,但请在此处查看正在运行的实现 - https://bnon.xyz
前端免费托管在 netlify 上,后端和数据库托管在 Small Droplet 上的 Digital Ocean 上。
项目实施过程中,我们始终将安全性放在首位。我们使用 Recaptcha 来最大程度地减少自动短链接,这在后端和前端都会进行验证。
我希望稍后添加的一个功能是 VirusTotal 链接评级,以减轻任何恶意行为者使用此服务来传递有效载荷或绕过网络过滤设备的风险。
第五阶段 - 测试与集成
我花了一个下午的时间测试和维护这个应用程序的安全。这是一个非常有趣的项目,我乐于接受任何 Bug 或漏洞报告,因为总有一些东西值得学习和改进。
第六阶段 - 维护
到目前为止一切顺利,我已经把清单上的所有项目和错误都解决了。我有没有遗漏什么?
--
喜欢这篇文章吗?快来告诉我吧!💛🦄🔖
文章来源:https://dev.to/0xbanana/building-a-url-shortener-for-fun-and-no-profit-28j1