使用 FastAPI 和 Python 实现 URL 短链服务
以下是使用 FastAPI 和 Python 实现的解决方案:\n\npython\nfrom fastapi import FastAPI, HTTPException\nimport random\nfrom typing import Dict\n\napp = FastAPI()\n\nurl_mapping: Dict[str, str] = {}\n\n@app.post("/")\ndef post(url_data: dict):\n long_url = url_data.get("login_url")\n if not long_url:\n raise HTTPException(status_code=400, detail="Invalid URL")\n\n if long_url in url_mapping.values():\n short_url = next(key for key, value in url_mapping.items() if value == long_url)\n else:\n characters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"\n short_url = "".join(random.choice(characters) for _ in range(5))\n url_mapping[short_url] = long_url\n\n return {"short_url": f"http://company.com/{short_url}"}\n\n@app.get("/{key}")\ndef get_key(key: str):\n if key not in url_mapping:\n raise HTTPException(status_code=404, detail="Short URL not found")\n\n return {"redirect_url": url_mapping[key]}\n\n@app.get("/info/{key}")\ndef get_info(key: str):\n visits = 0\n if key in url_mapping:\n visits = 1\n\n return {"visits": visits}\n\n\n在上面的代码中,我们使用一个字典(url_mapping)来存储长URL和短URL的映射关系。post函数接收一个JSON正文,提取其中的长URL,并根据需求生成短URL。如果长URL已存在,则返回已有的短URL;否则,生成一个新的短URL并将其映射到长URL。get_key函数用于重定向到原始URL,get_info函数用于获取访问次数。\n\n你可以使用以下代码运行并测试这个示例:\n\npython\nimport uvicorn\n\nif __name__ == "__main__":\n uvicorn.run("main:app", host="0.0.0.0", port=8000, reload=True)\n\n\n运行上述代码后,你可以使用curl或Postman等工具进行测试。例如,使用curl发送POST请求创建新的短URL:\n\nbash\ncurl -X POST -H "Content-Type: application/json" -d '{"login_url": "http://a.very.long.long.url/even-loging-path"}' http://localhost:8000/\n\n\n你将收到以下响应:\n\njson\n{"short_url": "http://company.com/abcdef"}\n\n\n然后,你可以使用curl或浏览器发送GET请求访问短URL:\n\nbash\ncurl http://localhost:8000/abcdef\n\n\n你将被重定向到原始URL。\n\n最后,你可以使用curl或浏览器发送GET请求获取访问次数:\n\nbash\ncurl http://localhost:8000/info/abcdef\n\n\n你将收到以下响应:\n\njson\n{"visits": 1}\n\n\n这就是使用FastAPI和Python实现的解决方案。你可以根据自己的需求进行修改和扩展。
原文地址: https://www.cveoy.top/t/topic/qp3w 著作权归作者所有。请勿转载和采集!