当前位置: 首页 > 网络应用技术

合理地使用Java和Spring Boot来建立一个简短的链接生成器

时间:2023-03-07 15:49:46 网络应用技术

  URL简短链接生成器是基于冗长URL的简短链接服务。通常,短链路的长度仅为原始URL的三分之一,甚至是四分之一的原始URL。和按下。用户只需要单击短链接即可自动重定向到原始URL。

  目前,tiny.cc,bitly.com和cutt.ly可以提供在线URL缩短服务。当然,您还可以设计和开发缩短应用程序系统URL的服务。BELOW,我将与首先,让我们讨论与之相关的功能和非功能需求。

  URL简短链接生成器中最重要的事情是转换算法。不同的转换方法通常会产生不同的输出,并且它们具有自己的优势和缺点。支持我们需要一个最长的7个字符的简短链接。然后我们可以使用哈希功能。例如md5或sha-2以后的原始URL。从铺设结果将超过7个字符,我们只采用前7个字符。但是,由于前7个字符可能已用于其他短链接,这将是引起冲突,我们需要稍后又拦截这七个字符,直到他们找到使用的简短链接为止。

  生成短链接的第二种方法是使用UUID。UUID的可能性大约为零,因此它可以完全忽略冲突的可能性。由于UUID由36个字符组成,因此仍然可能遇到上述问题。因此,我们应该拦截前7个字符,然后检查组合是否已被占据。

  第三种方法是将数字从基本10转换为基础62.base是可以用来表示特定数字的字符数。Base10是我们日常生活中使用的数字,即:[0-9],并且基础62是:[0-9] [az] [az]。这意味着这四个数字的10个数字作为基数的数量将与基数的62数量相同,但是有两个字符。在URL转换中,使用最大长度为7个字符的基本62将使我们能够为短链接提供62^7的唯一值。

  我使用以下算法将10至10至62中的10号转换为10:

  基于此,我们只需要映射将结果集中到62 [0,1,2,...,a,b,c ...,a,b,c,c,...]的数字。本质

  在下面,我通过将1000从基本10转换为基础62来讨论其工作机制。

  [16,8]被映射到基础62后,是g8,即1000base10 = g8base62。

  从基础62到基础10的过程也非常简单,即::::

  因此,相应的代码示例是:

  我使用Spring Boot和MySQL来实现该服务,并使用数据库的自动增加函数来实现基本62转换。当然,您还可以使用任何其他数据库自动增加。

  首先,访问Spring Initializr,然后选择Spring Web和MySQL驱动程序。然后,单击“生成”按钮并下载相应的ZIP文件。完成解压缩后,我们可以在IDE中打开项目。

  我创建了一个文件夹:控制器,实体,服务,存储库,DTO和配置,以在逻辑上划分程序代码。

  在“物理”文件夹中,我创建了一个带有ID,longurl,Createate和Expiresdate的URL.JAVA类

  请注意,既没有简短的链接属性,也没有保存简短的链接。每个时间都有GET请求,我们将将ID属性从基本10转换为基本62,以节省数据库中的空间。

  访问短链接时,用户应根据longurl属性重定向到目标网站。您可以设置到期的日期。

  然后,在“服务”文件夹中,我创建了一个baseService.java文件。它包含从基本10到基数62的方式。

  如前所述,如果要使用要转换的基本62,则需要具有一个名为“允许characters”的基本62字母。加上添加,以便于按需促进所需的字符,我们可以根据基本变量的值计算基本变量的值字符的长度。在它们中,编码方法将使用数字作为输入来返回一个短链接;解码方法将接受字符串(例如:简短链接)作为输入并返回一个数字。

  在存储库文件夹中,我创建了urlrepository.java file.t只是jparepository的扩展名,并提供了诸如“ findbyid”和“ save”之类的方法。在这里,我们不需要添加任何添加。

  然后,我在“控制器”文件夹中创建了一个urlcontroller.java文件(请参阅以下代码)。它提供了一种创建短链接的邮政方法,以及用于重定向到原始URL的GET方法。

  其中,邮政方法将使用urlongrequest作为请求主体。这是一个具有longurl和expiresdate属性的类。GET方法将使用一个简短的URL作为路径变量,并将其重定向到原始URL。

  在控制器的上层上,将URLService注入作为后续解释的依赖项。

  urlservice.java包含很多逻辑,但还为控制器提供服务。ConvertToShortUrl仅由控制器的邮政方法使用。它刚刚在数据库中创建了一个新记录,并获得了一个ID来将其转换为简短链接基础62并将其返回到控制器。

  控制器使用getriginalurl方法,然后首先将字符串转换为基本10类型ID。它将原始URL返回到控制器。

  下面,我将与您讨论Swagger文档,Dockerization(容器化),缓存和MySQL计划的事件。

  在开发的开发中,文档的记录无疑可以使API易于理解和使用。在此项目中,我使用Swagger UI录制API.Swagger UI允许任何人可视化API资源而无需任何逻辑,并与之互动它不仅可以自动生成,而且还可以具有可视化文档来促进后端实现和客户使用。

  我在项目中介绍了Swagger UI,通过执行以下步骤。首先,我将maven依赖项添加到pom.xml文件:

  添加Maven依赖关系后,我们可以添加Swagger的相关配置。在“配置”文件夹中,我创建了一个新的class-swaggerConfig.java,请参阅以下代码段。

  爪哇

  在此课程的顶部,我添加了以下注释:

  接下来,我添加了DiCket Bean。它提供了主要的API配置,其中包括各种合理的默认值和方便的配置方法。

  除了使用默认值之外,这里的APIINFO()方法还可以接受APIINFO对象,以便我们可以配置所有必要的API信息。为了使代码更加简洁,我们可以创建一个私有方法-Metadata()要配置和返回APIINFO对象,并将此方法传递为APIINFO()方法的参数。在同一时间,APIS()方法还允许我们过滤那些已文档的数据包。

  完成Swagger UI的配置后,我们可以在UrlController内部的每个端点上启动基于文档的API。我们可以使用@ApiPeration添加描述性注释。当然,您还可以根据需要使用其他类型的注释。

  我们还可以DTO并使用@ApiMolProperty添加各种允许的值和描述。

  根据Wikipedia的定义,[CACHE](https://en.wikipedia.org/wiki/cache_(computing)是存储数据的软件和硬件组件,可用于处理相同数据的请求缓存中的数据通常是早期计算的结果,或者是在其他地方存储的数据副本。

  目前,最常用的缓存类型是内存缓存。它可以将缓存数据存储到RAM中。请求数据与缓存一致时,它是从RAM中提取而不是数据库的。基于此,我们避免了频繁的频繁在后端打电话。

  因为URL简短链接生成器可以视为一个请求应用程序,它是读取的读取而不是写作,所以它是使用缓存的理想应用程序场景。如果您想在Spring Boot应用程序中启用缓存,我们只需要在urlShortEnerApplication类。

  然后,在控制器中,我们需要在GET方法上设置@cachable注释,以将方法调用的自动方法实现到缓存中。在@cachable的注释中,我设置了缓存名称的值参数和键参数赋予缓存键的唯一性,我使用“ shorturl”,并将同步参数设置为true,以确保只有一个线程构建一个减速值。

  在这一点上,当我们首次加载了带有短链接的URL时,结果将保存到缓存中。将来,如果任何端点都想调用相同的短链接,它将从缓存而不是数据库中检索结果。

  Dockerization是包装应用程序及其对[Docker]的依赖性的过程(https://en.wikipedia.org/wiki/wiki/docker_(软件)容器。主机上的应用程序应用程序。

  因此,我们首先需要创建一个包含所有命令的dockerfile文本文件,以便用户可以通过调用命令行来安装镜像。

  Dockerfile

  为了在项目中创建a.jar文件,以便Dockerfile中的复制命令可以正常工作,我使用Maven创建可执行文件.jar.jar.if your pom.xml lact lack nave nlavs maven,请添加如下:

  XML

  随后,我运行命令:MVN Clean Package以构建Docker Mirror。并实现版本控制。此处,最新的存储库URL-Shortener.我们可以使用命令“ Docker Images”来创建镜像。屏幕上的显示结果是:

  最后,我还需要在Docker容器中构建MySQL Server镜像,以促进使用应用程序容器的隔离数据库容器。出于此原因,我在Docker容器中运行以下命令:

  您可以在Docker Hub上检查相关文档。

  为了在容器中运行数据库,我通过配置将现有应用程序连接到MySQL Server。也就是说:Spring.datasource.URL在应用程序中设置为:Properties以连接到Shortener容器。

  然后,我使用以下命令来运行已建立的Docker Mirror容器:

  在这一点上,我们可以访问http:// localhost:8080/swagger-ui.html.dy将图像发布到Docker Hub,任何计算机和服务器都可以轻松运行该应用程序。

  当然,为了改善Docker的经验,我们需要注意两阶段的建筑和码头组合。

  具有多个阶段的施工,您将能够从Dockerfile中的状态语句中使用多个。每个指令都可以使用不同的基础,并且每个指令都可以打开一个新的构造阶段。您可以从一个阶段选择性地复制各种工件(伪像)到另一个,并删除最终镜像中不需要的内容。

  在多个阶段的构造有利于我们避免每次更改代码,我们必须手动重建.jar文件。基于此,我们可以定义一个施工阶段以执行maven package命令。在另一个阶段,在第一个构造的结果将直接复制到docker容器的文件系统。

  COMPOSE是定义和运行多 - 范围Docker应用程序的工具。在帮助的情况下,您可以使用YAML文件来配置应用程序的应用程序,然后使用单个命令来创建并从配置中启动所有服务。

  使用Docker-Compose,我们可以将应用程序和数据库包装到配置文件中以立即运行所有内容。基于此,我们避免每次运行MySQL容器,将其链接到乏味的应用程序容器。

  可以看到Docker-compose.yml文件的特定配置内容:首先,我们通过设置MySQL V8.0和MySQL Server的映像来配置MySQL容器,然后设置镜像。应用程序容器。毕竟,我们需要的是镜子,而不是使用mysql进行拉动。此外,我们需要通过设置使应用程序容器取决于mySQL容器。在末端,我们可以使用命令“ Docker-Compose”运行整个项目。

  当涉及到短链接的到期时,我们可以同时进行自定义并维护默认值。为此,我们可以在数据库中设置一个计划事件。事件每X分钟运行。只要到期时间小于当前时间,数据库将自动删除某个行,这是如此简单。这非常适合在数据库中维持少量数据。值得注意的方法:

  通过上述示例和讨论,我向您展示了如何使用Java和Spring Boot创建URL短链接生成器的API。这是一个非常普遍的访谈问题。您可以根据此创建自己的改进版本,还可以从上面的GitHub项目创建自己的前端。