URL 缩短器:最佳编码方法?

2024-04-11

我正在创建一个链接缩短服务,并使用增量 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列。

当有人创建新链接时:

  1. 获取下一个最大的链接ID从数据库(出于性能原因,你真的应该使用autoincrement or SEQUENCE,取决于您的 RDBMS 提供的功能;否则继续并选择MAX(ID)+1 )
  2. 生成一个短 URL 代码(http://website.com/[short url name]) from ID using base64_encode or any其他自定义或标准编码方案
  3. 插入到links table: ID, short_url_code, destination_url
  4. 如果由于违反约束而导致插入失败,请返回步骤 1 尝试新的ID;您可能因以下原因而发生违规:

    1. 相同的 ID 已被另一个线程/进程等并行使用(即插入)(这将not如果你使用过,就会发生autoincrement or SEQUENCE,并且可能经常发生),和/或
    2. 相同short_url_code已被用作自定义 URL(这种情况很少发生,除非有人试图在您的网站上制造麻烦)
  5. 如果插入成功,则提交并返回短URL给用户

当有人创建新链接并传递自定义短 URL 时:

  1. 执行与上面相同的步骤 1
  2. 而不是生成短网址部分来自ID如上面的步骤 2 所示,使用自定义short_url_code由用户提供
  3. 执行与上面相同的步骤 3
  4. If the insert failed because of:
    1. 违反约束ID:返回步骤 1 尝试新的ID
    2. 违反约束short_url_code:向用户返回错误,要求他选择不同的自定义 URL,因为他/她提供的短 URL 已被使用
  5. 执行与上面相同的步骤 5
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

URL 缩短器:最佳编码方法? 的相关文章

随机推荐

  • 安装 Laravel 时出现错误:“./composer.json 不可写。”

    这是我运行的命令 composer global require laravel installer 这是我之后得到的文本和错误 Changed current directory to home dimitar composer comp
  • 使用 OpenCV 改进图像中的矩形轮廓检测

    我正在尝试检测给定图像中的矩形框 Original image but the image is not good enough to detect rectangles how can i improve it and detect al
  • Python 单元测试输出数据

    如果我用 Python 编写单元测试 使用 unittest 模块 是否可以输出失败测试的数据 以便我可以检查它以帮助推断导致错误的原因 我知道创建自定义消息的能力 它可以携带一些信息 但有时您可能会处理更复杂的数据 这些数据无法轻松表示为
  • 代号 1 个 JavaScript 回调

    我正在尝试在我的应用程序中显示同意页面 该页面应该用 html 编写 因此应用程序需要处理来自浏览器的按钮单击事件 我尝试复制博客中的例子 https www codenameone com blog new async java java
  • 如何将自定义图形适合boost图形库模板?

    我对 C 模板很生疏 而且我正在使用 boost 图形库 一个致命的组合 我在网上搜索过 但找不到任何关于如何采用自定义图形结构并将其足够适合 BGL 增强图形库 的直接说明 以便我可以使用增强图形遍历算法 有熟悉图书馆的人可以帮助我吗 编
  • 我可以更改 Firebug 控制台背景颜色吗?

    我更喜欢 Firebug 窗口具有深色背景颜色和浅色文本 或者甚至只是灰色背景而不是白色就足够了 有什么办法可以做到这一点 无论是通过调整 firebug 的原始文件还是通过使用扩展 这是一个不错的 firebug 深色主题 仅适用于 Fi
  • Visual Studio 错误:已添加具有相同键的项目

    当我尝试更改控件的默认图像时在 Windows 窗体上在表单设计器中 无论在哪个控件上的哪个位置 我收到此错误 错误消息 具有相同的项目 密钥已经添加 我尝试删除并重新创建资源 resx文件 我保证只有 1 个带有这些键的 resx 文件存
  • 在 PHP 8 上安装 apcu_bc 包时遇到问题

    安装包时遇到以下错误pecl install apcu bc在 PHP 8 上 In file included from tmp pear temp apcu bc php apc c 35 usr local include php e
  • 如何从滚动视图中删除子视图?

    我如何从滚动视图中删除所有子视图 我在滚动视图中有一个 uiview 和它上面的一个按钮 像这样 这是我在滚动视图中添加子视图的代码 void AddOneButton NSInteger myButtonTag lastButtonNum
  • java.util.regex.Pattern 可以进行部分匹配吗?

    是否可以知道流 字符串是否包含以下输入 could匹配正则表达式 例如 String input AA Pattern pat Pattern compile AAAAAB Matcher matcher pat matcher input
  • 按名称访问 ResourceDictionary

    假设我的 Application xaml 中有一些 ResourceDictionary 定义如下
  • django-reversion 撤消功能 - 恢复多个对象

    我正在尝试使用 django reversion 在 django 项目中实现 撤消 功能 以防用户意外修改多个对象 使用管理面板不起作用 因为必须一一恢复对象 我的问题是我无法创建包含多个对象数据的修订版本 即使当我这样做时 with r
  • React + Antd + Rollup 组件库“错误:无效的钩子调用。钩子只能在函数组件体内调用”

    我目前正在构建一个 UI 库来简化跨多个应用程序的维护 这些目前使用 Ant Design 一切似乎都很顺利 我在两者中都添加了我的对等依赖项package json and rollup config js 通过外部 我能够让 Rollu
  • 来自 Parcel.readException 的 NullPointerException (等)

    看起来像这样的异常令人困惑 FATAL EXCEPTION main java lang NullPointerException at android os Parcel readException Parcel java 1437 at
  • 导航抽屉 - 带 ListView 的标题视图

    我目前正在创建和定义一个导航抽屉 我现在想要一个标题视图 就像它们在谷歌应用程序上一样 位于项目行上方 我只找到了 RecyclerViews 的示例 但我不想使用它 我已经完成了 ListView 和所有其他东西 也许有人可以帮助我 提前
  • 如何在循环中使用链式构建器模式而不产生编译器错误?

    如何正确使用期望的构建器模式方法链接 https en wikipedia org wiki Method chaining在循环中 使用来自的示例log4rs https crates io crates log4rs 注意self不是一
  • MySQL 加入最大值

    通过在 Entry id 上加入下面的表格 我想从 food brands 表中提取具有最高 type id 的行 所以我应该得到下面的前 3 行 其中 type id 为 11940 食品品牌 id brand type id 15375
  • Python正则表达式,如何删除字符串中的所有匹配项

    我有一个正则表达式模式列表 rgx list pattern 1 pattern 2 pattern 3 我正在使用一个函数来循环列表 编译正则表达式 并应用findall获取匹配的术语 然后我想要一种从文本中删除所述术语的方法 def c
  • 从 mysql 数据库填充 Php 下拉列表[重复]

    这个问题在这里已经有答案了 我正在尝试从 mysql 数据库表填充下拉列表 这是代码 div class form group Select Make div
  • URL 缩短器:最佳编码方法?

    我正在创建一个链接缩短服务 并使用增量 ID 字段的 Base64 编码 解码来创建我的 url ID 为 6 的 url 为 http mysite com Ng http mysite com Ng 我还需要允许用户创建自定义网址名称