MCLF-CN / docs

公开的实现规范/文档
12 stars 0 forks source link

使用MCLF-CN提供的公用API服务 #3

Open ZhaiSoul opened 7 months ago

ZhaiSoul commented 7 months ago

检查项

您是什么类型的用户

第三方网站管理/负责人(MC相关的)

请简单的说一下您的想法

考虑到国内部分地区使用第三方资源站可能出现访问比较困难的问题,现公开征求是否提供统一的第三方API接口,例如CurseForge、Modrinth和其他公用API。 将由组织统一采购使用腾讯云EdgeOne,并提供中心服务器。

现阶段暂时考虑实现的接口有:CurseForge、Modrinth接口的代理访问,启动器管理平台,统一公告通知平台。

鉴权:

CurseForge和Modrinth都拥有各自的appid等鉴权信息,为防止遇到冲突亦或者第三方API拉闸,每个启动器请求时将使用自己的第三方网站鉴权id。 初步的设想是由本平台提供一个启动器注册平台,然后可以自行在平台上填写自己的第三方接口的鉴权信息,最后请求本平台调用第三方API时,只需要header头带上启动器在本平台的标识,最终请求时将自动带上该启动器设置的鉴权appid。

缓存:

接口将根据需求开启CDN级缓存,同时也将开启离线缓存功能,将会在中心服务器维护/崩溃时,依然会读取之前缓存的API内容,降低中心服务挂掉带来的影响。

收费:

由于EdgeOne是根据请求数和CDN流量来进行收费,大部分成本将使用MCLF-CN的公共资金提供,但如果有特定启动器的用量确实过于高的话,将会以腾讯云公开的最低活动价的8折进行收费。 由于是纯API访问,实际上流量用得并不多,用的多的可能是请求数,参考价格如下: image 如届时联系到云厂商提供赞助的话,我也会第一时间通知各位。

它能解决什么样的问题/带来什么样的帮助

能够利用国内网络加速用户访问部分非下载类型的海外服务,改善用户体验。 同时提供各大启动器的统一通知服务,所有启动器用户都能收到由MCLF-CN发布的通知。

期望的结果

统一使用第三方接口,减轻开发者的负担。

是否有对这个方案的相关链接?

No response

附注

No response

bangbang93 commented 7 months ago

还有公共资金的?

z0z0r4 commented 7 months ago

thinking https://github.com/z0z0r4/mcim

在换备案,所以 CDN 掉了

image

z0z0r4 commented 7 months ago

姑且,这里需要一些接口定义,返回值,或者决定要照抄源 API 的内容吗?

z0z0r4 commented 7 months ago

CurseForge和Modrinth都拥有各自的appid等鉴权信息,为防止遇到冲突亦或者第三方API拉闸,每个启动器请求时将使用自己的第三方网站鉴权id。

既然 GET 请求会被缓存,全部 POST 请求用同一个也没啥问题吧,现在的请求大头就三个 x-api-key 对应三个启动器...至今为止也没见过被封的(?

ZhaiSoul commented 7 months ago

CurseForge和Modrinth都拥有各自的appid等鉴权信息,为防止遇到冲突亦或者第三方API拉闸,每个启动器请求时将使用自己的第三方网站鉴权id。

既然 GET 请求会被缓存,全部 POST 请求用同一个也没啥问题吧,现在的请求大头就三个 x-api-key 对应三个启动器...至今为止也没见过被封的(?

不止会带x-api-key,还可能带上启动器的UA等传给cf他们,方便他们统计

z0z0r4 commented 7 months ago

这件事最起码的是启动器dev的支持以及资金来源吧...完全没有提及呢

ZhaiSoul commented 7 months ago

这件事最起码的是启动器dev的支持以及资金来源吧...完全没有提及呢

资金来源这个还在整理以及找老板中,暂时没新消息。主要先讨论这个提议有做下去的必要没

LTCatt commented 7 months ago

目前 Modrinth 在国内访问状态良好,感觉没必要代理,倒是 CurseForge 问题非常大,如果有的话自然是最好的……

z0z0r4 commented 7 months ago

哪些接口已经被启动器使用了呢?需要参考

在进行缓存的情况下,提供两个平台的全部信息工作量不小,是否应该提供聚合接口?

个人认为应该既然已经缓存了,就应该剔除多余信息,聚合接口仅留下以下需求所必须的信息

以下是我猜测的需求

  1. 搜索 Mod
  2. 单个/多个 Mod 基本信息,版本列表
  3. 具体版本信息
  4. 单个/多个 fingerprint,hash 检索

只是混合两个平台的数据还好

不清楚是否会使用这些数据,但 Mod 依赖、Mod 分类依据 需要详细定义,得根据两个平台定义...很麻烦

两个平台都有自己的分类依据,聚合显得有点困难,BakaXL 现有的是怎么做的?

LTCatt commented 7 months ago

你可以在 PCL 的仓库里搜 api.curseforge.com 和 api.modrinth.com

ZhaiSoul commented 7 months ago

哪些接口已经被启动器使用了呢?需要参考

在进行缓存的情况下,提供两个平台的全部信息工作量不小,是否应该提供聚合接口?

个人认为应该既然已经缓存了,就应该剔除多余信息,聚合接口仅留下以下需求所必须的信息

以下是我猜测的需求

  1. 搜索 Mod
  2. 单个/多个 Mod 基本信息,版本列表
  3. 具体版本信息
  4. 单个/多个 fingerprint,hash 检索

只是混合两个平台的数据还好

不清楚是否会使用这些数据,但 Mod 依赖、Mod 分类依据 需要详细定义,得根据两个平台定义...很麻烦

两个平台都有自己的分类依据,聚合显得有点困难,BakaXL 现有的是怎么做的?

目前BakaXL是把两个接口的内容进行搜索后,以两个站点的内容合并交叉显示的。 然后只有部分字段聚合了一下,大部分字段我直接不让搜

older-fox commented 7 months ago

喔~ 这个好,有需要的话我可以做一个出来,爬虫我擅长啊 @bangbang93

8MiYile commented 7 months ago

我这里再补充一点 服务器上面要统计哪些资源属于热门资源 热门资源是可以302到bmclapi的 需要请求通知到bmclapi @bangbang93 你怎么看?

z0z0r4 commented 7 months ago

我这里再补充一点 服务器上面要统计哪些资源属于热门资源 热门资源是可以302到bmclapi的 需要请求通知到bmclapi @bangbang93 你怎么看?

这不提供 mod 下载吧...

我记得作者发钱按下载量算的,而且 bmclapi 这么高负载你还找它...

z0z0r4 commented 6 months ago

还有七天开学,我是废物做不完了…这几天得出门,bad end

暂时搁置,大概是下个暑假才搞得完了

大佬们有兴趣的做吧,当然没人做带 缓存 的话我会继续找时间重构的

新的东西太多了不会调.jpg 步子大了拉到蛋 又想陪特莉波卡 当社会实践了

burningtnt commented 6 months ago

可能的话,请保持 API 与原站完全一致 这样可以直接在启动器中修改 API Root,即可切换至镜像

older-fox commented 6 months ago

可能的话,请保持 API 与原站完全一致 这样可以直接在启动器中修改 API Root,即可切换至镜像

这种不太好做到,毕竟某些参数不可能做到完全一致,如果和原站一样的话,那叫反向代理

zkitefly commented 6 months ago

可能的话,请保持 API 与原站完全一致 这样可以直接在启动器中修改 API Root,即可切换至镜像

这种不太好做到,毕竟某些参数不可能做到完全一致,如果和原站一样的话,那叫反向代理

能解释下那些参数不可能做到完全一致吗

z0z0r4 commented 6 months ago

可能的话,请保持 API 与原站完全一致 这样可以直接在启动器中修改 API Root,即可切换至镜像

这种不太好做到,毕竟某些参数不可能做到完全一致,如果和原站一样的话,那叫反向代理

能解释下那些参数不可能做到完全一致吗

姑且,全部一致在我这就是 model 写长点…留下必要的部分就行了,不少参数都是多余的或者不知道含义的…比如 isearlyaccess 这些

burningtnt commented 6 months ago

这种不太好做到,毕竟某些参数不可能做到完全一致,如果和原站一样的话,那叫反向代理

抱歉,我用词不当。我希望我们的新 API 是原站的一个子集,即,API 路径不变、参数名称和类型不变(但可以少)

d3ara1n commented 5 months ago

支持国内有统一的minecraft resource index站点,但这个东西既需要钱也要大量技术,属实不好做的

z0z0r4 commented 4 months ago

标准征求:

burningtnt commented 4 months ago

建议直接定义 HTTP 状态码 600 Cache Not Found

zyxkad commented 4 months ago

不要乱加定义,非304的响应都是算没有缓存

Silverteal commented 4 months ago

定义非标准的状态码在无法控制全部客户端的情况下可能不是一个好主意

此场景使用404状态码似乎没有什么问题

z0z0r4 commented 3 months ago

目前,HCML 与 PCL2 已经双双跑通,可以直接替换 url,前瞻体验

https://github.com/z0z0r4/mcim

仓库见 https://github.com/z0z0r4/PCL2https://github.com/z0z0r4/HMCL

提供 build PCL2HMCL

image

image

如遇到 404 等情况,等待几秒后再尝试就能拉取到数据了(首次缓存

目前缺少可靠性测试,如果有人愿意来写下 pytest 可太好了

当前搜索接口未缓存,直接拉取源,因此会较慢,即将改善

LTCatt commented 3 months ago

umm 如果这能只提供 API 中转,但不能提供文件下载中转的话……连不上 CF 的玩家只是能看到文件列表了,但点进去也没法下载,似乎就意义不大……

z0z0r4 commented 3 months ago

umm 如果这能只提供 API 中转,但不能提供文件下载中转的话……连不上 CF 的玩家只是能看到文件列表了,但点进去也没法下载,似乎就意义不大……

这个议题从一开始就没提供文件下载

以及听说 mod 开发者按下载量得报酬,这方面如何处理?

如果只是作为备线的话,我个人觉得可以考虑,不代表 @ZhaiSoul

PCL2 有收集关于每日 mod 文件下载量,以及针对无法下载文件这一缺口之类的指标可以作为参考吗?

缺少数据,没法评估成本

如果能够接受和 ob 当前一样的网盘策略,倒是可能

LTCatt commented 3 months ago

我只是说考虑到实际的使用情况,就算用了 API 中转,问题也没有解决……对那部分无法访问的玩家而言,只是变成了能看文件列表,但还是不能下……

关于 CurseForge 的下载量统计,目前所有从 API 下载的文件似乎都不会计算下载量。 我个人的主观、片面的看法是,既然用的是 CurseForge 官方的 API,他们必然有能力把这部分下载计入。目前不计下载、不给 mod 作者报酬的情况,有可能是他们刻意而为之的,启动器作者没有任何办法解决。 但从结论上说,即使使用了文件中转,也不会影响下载量:因为 CurseForge 官方本来就不给计这个……

PCL 没有主动收集用户数据,我也不知道成本,但目测很高,不咋建议做……

z0z0r4 commented 3 months ago

PCL 没有主动收集用户数据,我也不知道成本,但目测很高,不咋建议做……

没别的意思,统计数据我只是想参考下得挂几个节点

我只是说考虑到实际的使用情况,就算用了 API 中转,问题也没有解决……对那部分无法访问的玩家而言,只是变成了能看文件列表,但还是不能下……

这个,我正在照抄 bmclapi 挂载文件到网盘,估计会在端午前完成,可以期待

关于 CurseForge 的下载量统计,目前所有从 API 下载的文件似乎都不会计算下载量。 我个人的主观、片面的看法是,既然用的是 CurseForge 官方的 API,他们必然有能力把这部分下载计入。目前不计下载、不给 mod 作者报酬的情况,有可能是他们刻意而为之的,启动器作者没有任何办法解决。 但从结论上说,即使使用了文件中转,也不会影响下载量:因为 CurseForge 官方本来就不给计这个……

缓存了的话,curseforge 那边显示的下载量自然会少,没看懂 刻意而为之 啥意思...可能理解错了

我不太了解 mod 咋算报酬的,下载量是去年听说的,有没有懂行的大佬解释下?

z0z0r4 commented 2 months ago

基本上,status 有了,可以看看稳定性

https://mcmod-info-mirror.github.io/status/

z0z0r4 commented 2 months ago

umm 如果这能只提供 API 中转,但不能提供文件下载中转的话……连不上 CF 的玩家只是能看到文件列表了,但点进去也没法下载,似乎就意义不大……

关于文件 CDN 已经部署好了,测试后就可以启用=-=

和 bmclapi 一样是网盘缓存,未缓存的内容会重定向到源站

不包括整合包等大于 50M 的文件

已经缓存了全部的 modrinth mod 共 300G 左右

FloatSheep commented 1 month ago

缓存了的话,curseforge 那边显示的下载量自然会少,没看懂 刻意而为之 啥意思...可能理解错了

按照我的理解,使用 CurseForge 提供的 API 下载就绕过了官网的广告,这样 CurseForge 得到的收入就会减少,也就可以解释为什么是 刻意而为之

z0z0r4 commented 1 month ago

缓存了的话,curseforge 那边显示的下载量自然会少,没看懂 刻意而为之 啥意思...可能理解错了

按照我的理解,使用 CurseForge 提供的 API 下载就绕过了官网的广告,这样 CurseForge 得到的收入就会减少,也就可以解释为什么是 刻意而为之

也就是说启动器下载一开始就无法为 Mod 作者提供报酬?

LTCatt commented 1 month ago

是,这是 CF 那边干的,只要是通过 API 访问它都不计数,我们没有任何办法

z0z0r4 commented 1 month ago

是,这是 CF 那边干的,只要是通过 API 访问它都不计数,我们没有任何办法

那我可就没任何心理负担了…镜像了也没影响人家收入…

z0z0r4 commented 1 month ago

@burningtnt @LTCatt 征求下启动器的意见:如果接入的话,能否够接受额外的 CDN 鉴权,参考 https://cloud.tencent.com/document/product/228/76110

Screenshot_20240719_152140.jpg

burningtnt commented 1 month ago

@burningtnt @LTCatt 征求下启动器的意见:如果接入的话,能否够接受额外的 CDN 鉴权,参考 https://cloud.tencent.com/document/product/228/76110

没有意义。HMCL 全部开源,别人可以极其简单的伪造鉴权信息。

Pigeon0v0 commented 1 month ago

没有意义。HMCL 全部开源,别人可以极其简单的伪造鉴权信息。

试试 GitHub 配置 Secret?

burningtnt commented 1 month ago

没有意义。HMCL 全部开源,别人可以极其简单的伪造鉴权信息。

试试 GitHub 配置 Secret?

???HMCL 的代码毫无混淆。你以为 CURSE_API_KEY 这种是私有的吗?只要你敢把 HMCL 里的 META-INF/MANIFEST.MF 打开,API Key 全在里面

z0z0r4 commented 1 month ago

@burningtnt @LTCatt 征求下启动器的意见:如果接入的话,能否够接受额外的 CDN 鉴权,参考 cloud.tencent.com/document/product/228/76110

没有意义。HMCL 全部开源,别人可以极其简单的伪造鉴权信息。

伪造鉴权是预料之内的,但可以简单的避免部分小鬼,考虑到你游的低年龄

虽说不适合类比,如果 PCL2 的远古版本下载不开鉴权肯定会更多人刷量

LTCatt commented 1 month ago

你可以考虑加启动器 UA 过滤?

allMagicNB commented 1 month ago

UA 也能伪造。

z0z0r4 commented 1 month ago

你可以考虑加启动器 UA 过滤?

我将来会加 UA 过滤

z0z0r4 commented 1 month ago

咋样都能伪造的...没准备用它避免伪造,防点小鬼

主要鉴权得启动器写...所以征求下开发的意见...

LTCatt commented 1 month ago

如果只是想避免从 log 复制网址的小鬼,那加 UA 检测其实就够了……

Silverteal commented 1 month ago

复制网址下载的小鬼偶尔下一下应该不会造成过大负担吧,有刷量意图和能力的绕个UA也不在话下

z0z0r4 commented 1 month ago

如果只是想避免从 log 复制网址的小鬼,那加 UA 检测其实就够了……

ok,那就这么办吧

z0z0r4 commented 1 week ago

@ZhaiSoul 事实证明缓存命中率也就罢了50% 上下,只有一个默认 keyword 的 search 能吃 CDN 缓存,其他的都是不同 hash 的 post...离线缓存几乎毫无意义hhh