[GH-ISSUE #1938] 提供一套完整的 RESTful api #1542

Closed
opened 2026-05-05 12:58:35 -06:00 by gitea-mirror · 18 comments
Owner

Originally created by @liuweiGL on GitHub (Aug 11, 2020).
Original GitHub issue: https://github.com/fatedier/frp/issues/1938

需求

希望 frps 服务端能对外提供一套标准的 api,方便第三方使用。

暂时期望的 api 列表:

  1. 获取客户端基础信息
  2. 获取每个客户端的代理配置
  3. 添加、修改客户端的代理配置
  4. 配置校验,防止错误的配置导致客户端无法启动

示例 api

Dreamacro/clash

使用场景

想要基于 api 开发一个代理管理服务,方便查看、维护代理配置。

解决的问题

  1. 目前修改代理需要手动去各个客户端主机上进行操作,一是繁琐,二是手动操作不可靠。
  2. 代理信息需要手动编写文档分享给同事
Originally created by @liuweiGL on GitHub (Aug 11, 2020). Original GitHub issue: https://github.com/fatedier/frp/issues/1938 ## 需求 希望 frps 服务端能对外提供一套标准的 api,方便第三方使用。 ### 暂时期望的 api 列表: 1. 获取客户端基础信息 2. 获取每个客户端的代理配置 3. 添加、修改客户端的代理配置 4. 配置校验,防止错误的配置导致客户端无法启动 ### 示例 api [Dreamacro/clash](https://github.com/Dreamacro/clash/wiki/external-controller-API-reference) ## 使用场景 想要基于 api 开发一个代理管理服务,方便查看、维护代理配置。 ## 解决的问题 1. 目前修改代理需要手动去各个客户端主机上进行操作,一是繁琐,二是手动操作不可靠。 2. 代理信息需要手动编写文档分享给同事
gitea-mirror 2026-05-05 12:58:35 -06:00
Author
Owner

@QQ2017 commented on GitHub (Aug 12, 2020):

其实自己也可以做的,frpc可以reload,所以支持动态增删代理,你只需要提供额外的管理程序。
至于信息获取方面,frps和frpc都有web管理接口,获取的数据都是标准json数据。

<!-- gh-comment-id:672432218 --> @QQ2017 commented on GitHub (Aug 12, 2020): 其实自己也可以做的,frpc可以reload,所以支持动态增删代理,你只需要提供额外的管理程序。 至于信息获取方面,frps和frpc都有web管理接口,获取的数据都是标准json数据。
Author
Owner

@liuweiGL commented on GitHub (Aug 12, 2020):

自己做,每个客户端都部署一套管理程序?

<!-- gh-comment-id:672433552 --> @liuweiGL commented on GitHub (Aug 12, 2020): 自己做,每个客户端都部署一套管理程序?
Author
Owner

@liuweiGL commented on GitHub (Aug 12, 2020):

而且一般客户端都是内网环境,那我的管理程序本身还得再来个穿透?

<!-- gh-comment-id:672434256 --> @liuweiGL commented on GitHub (Aug 12, 2020): 而且一般客户端都是内网环境,那我的管理程序本身还得再来个穿透?
Author
Owner

@QQ2017 commented on GitHub (Aug 12, 2020):

自己做,每个客户端都部署一套管理程序?

可以这样做的,没有问题。你也可以做成DLL,让GO加载你的DLL,所有管理工作都在DLL中进行。

<!-- gh-comment-id:672434546 --> @QQ2017 commented on GitHub (Aug 12, 2020): > 自己做,每个客户端都部署一套管理程序? 可以这样做的,没有问题。你也可以做成DLL,让GO加载你的DLL,所有管理工作都在DLL中进行。
Author
Owner

@QQ2017 commented on GitHub (Aug 12, 2020):

而且一般客户端都是内网环境,那我的管理程序本身还得再来个穿透?

你自己应该有中间服务器吧,管理程序服务端放中间服务器就行了呀

<!-- gh-comment-id:672435093 --> @QQ2017 commented on GitHub (Aug 12, 2020): > 而且一般客户端都是内网环境,那我的管理程序本身还得再来个穿透? 你自己应该有中间服务器吧,管理程序服务端放中间服务器就行了呀
Author
Owner

@liuweiGL commented on GitHub (Aug 12, 2020):

不知道你说的中间程序是指什么呢?我目前使用 frp 就是 frps 跟 frpc 两个端。

<!-- gh-comment-id:672436414 --> @liuweiGL commented on GitHub (Aug 12, 2020): 不知道你说的中间程序是指什么呢?我目前使用 frp 就是 frps 跟 frpc 两个端。
Author
Owner

@liuweiGL commented on GitHub (Aug 12, 2020):

我要 frps 暴露接口,就是为了把代理管理服务做成一个云管理平台。
这样的话,搭建内网穿透的时候,只需要部署 frps 跟 frpc 服务(不用配置),然后去管理服务进行维护就好了。

<!-- gh-comment-id:672438658 --> @liuweiGL commented on GitHub (Aug 12, 2020): 我要 frps 暴露接口,就是为了把代理管理服务做成一个云管理平台。 这样的话,搭建内网穿透的时候,只需要部署 frps 跟 frpc 服务(不用配置),然后去管理服务进行维护就好了。
Author
Owner

@QQ2017 commented on GitHub (Aug 12, 2020):

image

<!-- gh-comment-id:672445121 --> @QQ2017 commented on GitHub (Aug 12, 2020): ![image](https://user-images.githubusercontent.com/23667705/89965833-55b3e900-dc80-11ea-9dc0-4888b12843c8.png)
Author
Owner

@liuweiGL commented on GitHub (Aug 12, 2020):

不一样,我这边的内网环境不止一套。
而且就算是放到能访问所有内网的跳机上,这样也不行: 如何自动更新客户端服务?自己弄只能手动维护这个信息。

<!-- gh-comment-id:672448425 --> @liuweiGL commented on GitHub (Aug 12, 2020): 不一样,我这边的内网环境不止一套。 而且就算是放到能访问所有内网的跳机上,这样也不行: 如何自动更新客户端服务?自己弄只能手动维护这个信息。
Author
Owner

@fatedier commented on GitHub (Aug 12, 2020):

@liuweiGL API 之后会重新设计,在计划中,但是只能用于获取信息,不能提供创建修改的能力。

客户端的配置目前的架构是客户端自己维护,服务端无法指定,这样的安全性会更高,不容易有漏洞暴露整个内网机器。

frpc 目前也有接口可以增删改查代理,这一块之后也会优化。

目前可能的一种方式,就是 frpc 提供一个选项,可以支持将自己的接口开放给 frps,frps 作为一个代理,再将这个接口提供给外部调用者。实际上目前也已经可以通过暴露 frpc admin service 的端口到 frps 来实现这一能力。

<!-- gh-comment-id:672636479 --> @fatedier commented on GitHub (Aug 12, 2020): @liuweiGL API 之后会重新设计,在计划中,但是只能用于获取信息,不能提供创建修改的能力。 客户端的配置目前的架构是客户端自己维护,服务端无法指定,这样的安全性会更高,不容易有漏洞暴露整个内网机器。 frpc 目前也有接口可以增删改查代理,这一块之后也会优化。 目前可能的一种方式,就是 frpc 提供一个选项,可以支持将自己的接口开放给 frps,frps 作为一个代理,再将这个接口提供给外部调用者。实际上目前也已经可以通过暴露 frpc admin service 的端口到 frps 来实现这一能力。
Author
Owner

@skywalkerscott commented on GitHub (Sep 6, 2020):

@liuweiGL API 之后会重新设计,在计划中,但是只能用于获取信息,不能提供创建修改的能力。

客户端的配置目前的架构是客户端自己维护,服务端无法指定,这样的安全性会更高,不容易有漏洞暴露整个内网机器。

frpc 目前也有接口可以增删改查代理,这一块之后也会优化。

目前可能的一种方式,就是 frpc 提供一个选项,可以支持将自己的接口开放给 frps,frps 作为一个代理,再将这个接口提供给外部调用者。实际上目前也已经可以通过暴露 frpc admin service 的端口到 frps 来实现这一能力。

目前我就是通过frpc admin 端口暴露给服务端,然后热加载配置实现的客户机的配置更新的

<!-- gh-comment-id:687726187 --> @skywalkerscott commented on GitHub (Sep 6, 2020): > @liuweiGL API 之后会重新设计,在计划中,但是只能用于获取信息,不能提供创建修改的能力。 > > 客户端的配置目前的架构是客户端自己维护,服务端无法指定,这样的安全性会更高,不容易有漏洞暴露整个内网机器。 > > frpc 目前也有接口可以增删改查代理,这一块之后也会优化。 > > 目前可能的一种方式,就是 frpc 提供一个选项,可以支持将自己的接口开放给 frps,frps 作为一个代理,再将这个接口提供给外部调用者。实际上目前也已经可以通过暴露 frpc admin service 的端口到 frps 来实现这一能力。 目前我就是通过frpc admin 端口暴露给服务端,然后热加载配置实现的客户机的配置更新的
Author
Owner

@liuweiGL commented on GitHub (Sep 7, 2020):

  • 能用
  • 好用
  • 优雅

看个人的习惯吧,很多东西多绕几圈,都是能用的。

<!-- gh-comment-id:687976081 --> @liuweiGL commented on GitHub (Sep 7, 2020): - 能用 - 好用 - 优雅 --- 看个人的习惯吧,很多东西多绕几圈,都是能用的。
Author
Owner

@xmsz commented on GitHub (Nov 30, 2021):

现在情况怎么样

<!-- gh-comment-id:982502484 --> @xmsz commented on GitHub (Nov 30, 2021): 现在情况怎么样
Author
Owner

@onlyGuo commented on GitHub (Oct 20, 2022):

沟通没在一个频道上,lssuse的原意是frpc仅注册到frps中,由frps统一管理配置和下发配置,而不是单独维护每个frpc的配置。
将7400交给frps是一个不是办法的办法
因为一旦frpc的数量多了的话,就得找个小本本记下来:

  • 映射机器1的端口我要访问7400、
  • 映射机器二的端口我要访问17400、
  • 映射机器三的端口我要访问27400
<!-- gh-comment-id:1284975946 --> @onlyGuo commented on GitHub (Oct 20, 2022): 沟通没在一个频道上,lssuse的原意是frpc仅注册到frps中,由frps统一管理配置和下发配置,而不是单独维护每个frpc的配置。 将7400交给frps是一个不是办法的办法 因为一旦frpc的数量多了的话,就得找个小本本记下来: > - 映射机器1的端口我要访问7400、 > - 映射机器二的端口我要访问17400、 > - 映射机器三的端口我要访问27400
Author
Owner

@pkxutao commented on GitHub (Apr 20, 2023):

请问现在开发完成了吗?我没找到相关文档

<!-- gh-comment-id:1515925072 --> @pkxutao commented on GitHub (Apr 20, 2023): 请问现在开发完成了吗?我没找到相关文档
Author
Owner

@aizhimou commented on GitHub (Nov 5, 2023):

请问下restful api开发有进展吗?我想做一个dashbord的移动端,找不到api

<!-- gh-comment-id:1793643723 --> @aizhimou commented on GitHub (Nov 5, 2023): 请问下restful api开发有进展吗?我想做一个dashbord的移动端,找不到api
Author
Owner

@github-actions[bot] commented on GitHub (May 22, 2025):

Issues go stale after 14d of inactivity. Stale issues rot after an additional 3d of inactivity and eventually close.

<!-- gh-comment-id:2899586324 --> @github-actions[bot] commented on GitHub (May 22, 2025): Issues go stale after 14d of inactivity. Stale issues rot after an additional 3d of inactivity and eventually close.
Author
Owner

@everhopingandwaiting commented on GitHub (Nov 11, 2025):

做成 nps / npc 的客户端管理模式就满足你需求了吧

<!-- gh-comment-id:3515442480 --> @everhopingandwaiting commented on GitHub (Nov 11, 2025): 做成 nps / npc 的客户端管理模式就满足你需求了吧
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: github-starred/frp#1542
No description provided.