用LessAPI搭建免费的DockDockGo搜索API
在开发AI项目的时候经常需要用到搜索引擎,但目前市面上大多数接口都需要付费。今天我向大家推荐一款超牛的开源项目——LessAPI-DuckDuckGo,让你轻松拥有一款属于自己的搜索引擎API服务! 项目简介 LessAPI-DuckDuckGo 是一个基于 playwright 和 DuckDuckGo 搜索引擎的API服务。它具有以下特色: 1. 简单易用 :接口设计极其简单,封装隐藏了…
在开发AI项目的时候经常需要用到搜索引擎,但目前市面上大多数接口都需要付费。今天我向大家推荐一款超牛的开源项目——LessAPI-DuckDuckGo,让你轻松拥有一款属于自己的搜索引擎API服务! 项目简介 LessAPI-DuckDuckGo 是一个基于 playwright 和 DuckDuckGo 搜索引擎的API服务。它具有以下特色: 1. 简单易用 :接口设计极其简单,封装隐藏了…
BFF(Backend for Frontend)架构是一种设计模式,它在后端服务器和前端用户界面之间引入了一个中间层。BFF充当中介,负责处理前端应用程序的请求并与后端服务通信。这种架构可以提高前后端协同效率,优化接口调用,以及满足不同前端设备的需求。 BFF架构开发注意点 在使用BFF架构进行项目开发时,需要注意以下几点: - 分层清晰:确保BFF层职责清晰,避免过度耦合。BFF应只负责处理前…
关于Drone Drone是一个基于Golang实现的CI/CD工具。不同于传统Jenkins或Gitlab巨大的资源占用。得益于Golang短小精悍的特性,在Drone中使用pipline文件,可以实现相当复杂的构建部署工作。甚至可以自己编写插件参与到构建流程中。 企业微信机器人Webhook消息推送 自动化CI/CD过程中,即时推送构建部署结果,可以带来很棒的DevOps体验。典型的DevOp…
前言 众所周知,在SpringBoot中 @Autowire 依赖注入是极其方便的。 在Golang中,也可以利用 reflect 反射实现简单的依赖注入。但在泛型出现之前,这样的依赖注入在IDE提示上不够优雅,如果实例和interface的类型不对应,需要在运行时才会报错。(可以参考我之前的文章《[Golang实现简单的IoC][1]》) Golang 1.18 终于推出泛型后,我们以利用泛型的…
利用Golang强大的net库,可以轻松实现一个简单的TCP端口转发程序(TCP反向代理)。 package main import ( "fmt" "io" "net" ) var ( serverAddr = "127.0.0.1:80" // 目标服务器地址 proxyAddr = ":8081" // 本地代理监听地址 ) func main() { go Li…
Spring Boot 接入Jager后,访问接口时,默认显示对应控制器的方法名。如下图: 控制器方法名经常会重名,也不利于我们利用URL查询接口。在这种情况下,我们可以利用Opentracing提供的方法获取到当前Span,并修改OperationName。 1、新建一个Filter用于修改OperationName 通过 GlobalTracer 获取到当前 Span ,并写入 HttpSer…
SpringBoot中Servlet提供的Filter与Gin的Middleware洋葱模型是很相似的,本质上可以认为是责任链设计模式。通过Filter,我们可以获取到请求对象 ServletRequest 、响应对象 ServletResponse 。 利用Filter的特性,我们可以实现一个Filter,获取Request和Response,并整合写入到日志中去。 本文基于 Spring Bo…
Zipkin是最早流行起来的主流分布式跟踪平台,起源于Google Dapper并由Twitter进一步开发。而后Uber用Golang实现了Jaeger。Jaeger除了兼容Zipkin原有的大部分功能以外,还提供了更为丰富的功能。对比来说,两者都是比较成熟稳定的分布式跟踪解决方案。 考虑Jaeger更好的性能、更轻量的资源占用,所以决定在项目中使用Jaeger。 Spring Cloud 的S…
Githu地址 https://github.com/alibaba/p3c 当前最新版本:黄山版(2022.2.3发布) [Java开发手册(黄山版).pdf][1] [1]: https://www.ywlib.com/usr/uploads/2022/04/4289358582.pdf
在实现管理后台业务时,基本上一定会遇到对列表进行筛选操作(如下图)。将筛选条件逐个硬编码到服务端代码中,一定是又臭又长。因此在成熟的项目中,一般都会对列表查询筛选条件进行封装。这里就提供一个简单的封装方案。 简单演示 如果硬编码了筛选条件,后台查询接口的Payload一般会是这样: { page:1, size:10, where:{ name:"xxx", mobileNumber:"11122…
前提假设 - 已经有一个科学代理运行在 127.0.0.1:7890 具体设置 - 打开设置“文件 - 设置” - 打开“构建、执行、部署 - 构建工具 - Maven - 正在导入” - 找到下方“导入程序的VM选项”,填写代理参数 -DproxyHost=127.0.0.1 -DproxyPort=7890 - “确定”保存设置 这样操作后,IDEA在调用Maven时,Maven就会自动通过代…
借鉴之前公司同事的思路,简单实现一个IoC练练手。 package ioc import ( "fmt" "reflect" ) var container map[reflect.Type]map[string]reflect.Value func init() { container = map[reflect.Type]map[string]reflect.Value{} } const (…