我正在创建一个链接缩短服务,并使用增量 ID 字段的 Base64 编码/解码来创建我的 url。 ID 为“6”的 url 为:http://mysite.com/Ng== http://mysite.com/Ng==
我还需要允许用户创建自定义网址名称,例如http://mysite.com/music http://mysite.com/music
到目前为止,这是我的(可能是错误的)方法。帮助修复它将不胜感激。
当有人创建新链接时:
- 我从数据库中获取最大的链接ID(它不是自动递增的)
- 将ID加1
- 生成一个短 URL 代码(http://website.com/[短 http://website.com/%5Bshorturl 名称]) 通过 base64_encoding 该 ID
- 插入链接表:id、short_url_code、destination_url
当有人创建新链接并传递自定义短 URL 时:
- 我的计划是对其自定义字符串进行 base64_decode 并将其用作链接 ID,但我没有意识到您不能只对任何字母数字字符串进行 base64_decode 并将其转换为数字。
是否有更好的编码方法可以让我将任何数字转换为短字符串,并将任何字符串转换为数字,这样我就可以通过将名称转换为数字并查询链接来查找短网址(无论是自定义还是自动生成) ID 等于该号码?
首先也是最重要的,确保你有唯一性约束 on the ID
and short_url_code
列。
当有人创建新链接时:
- 获取下一个最大的链接
ID
从数据库(出于性能原因,你真的应该使用autoincrement
or SEQUENCE
,取决于您的 RDBMS 提供的功能;否则继续并选择MAX(ID)+1
)
- 生成一个短 URL 代码(
http://website.com/[short url name]
) from ID
using base64_encode
or any其他自定义或标准编码方案
- 插入到
links
table: ID, short_url_code, destination_url
-
如果由于违反约束而导致插入失败,请返回步骤 1 尝试新的ID
;您可能因以下原因而发生违规:
- 相同的 ID 已被另一个线程/进程等并行使用(即插入)(这将not如果你使用过,就会发生
autoincrement
or SEQUENCE
,并且可能经常发生),和/或
- 相同
short_url_code
已被用作自定义 URL(这种情况很少发生,除非有人试图在您的网站上制造麻烦)
如果插入成功,则提交并返回短URL给用户
当有人创建新链接并传递自定义短 URL 时:
- 执行与上面相同的步骤 1
-
而不是生成短网址部分来自
ID
如上面的步骤 2 所示,使用自定义short_url_code
由用户提供
- 执行与上面相同的步骤 3
- If the insert failed because of:
- 违反约束
ID
:返回步骤 1 尝试新的ID
- 违反约束
short_url_code
:向用户返回错误,要求他选择不同的自定义 URL,因为他/她提供的短 URL 已被使用
- 执行与上面相同的步骤 5
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)