Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
3 tasks done
ZhaiSoul opened this issue Feb 1, 2024 · 58 comments
Open
3 tasks done

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

ZhaiSoul opened this issue Feb 1, 2024 · 58 comments
Labels
还需更多讨论 也许还需要更多的讨论

Comments

@ZhaiSoul
Copy link
Member

ZhaiSoul commented Feb 1, 2024

检查项

  • 我充分理解提交的建议可能无法所有启动器作者参与,并尊重所有启动器开发者的选择
  • 我确认在Issues列表中并无其他人已经提出过与此问题相同或相似的问题
  • 我确认该反馈并非针对单个启动器的,如果是,我将会去该启动器的反馈页面反馈

您是什么类型的用户

第三方网站管理/负责人(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
Copy link

还有公共资金的?

@z0z0r4
Copy link

z0z0r4 commented Feb 1, 2024

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

在换备案,所以 CDN 掉了

image

@z0z0r4
Copy link

z0z0r4 commented Feb 1, 2024

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

@z0z0r4
Copy link

z0z0r4 commented Feb 1, 2024

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

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

@ZhaiSoul
Copy link
Member Author

ZhaiSoul commented Feb 1, 2024

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

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

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

@z0z0r4
Copy link

z0z0r4 commented Feb 1, 2024

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

@ZhaiSoul
Copy link
Member Author

ZhaiSoul commented Feb 1, 2024

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

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

@LTCatt
Copy link

LTCatt commented Feb 2, 2024

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

@z0z0r4
Copy link

z0z0r4 commented Feb 2, 2024

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

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

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

以下是我猜测的需求

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

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

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

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

@LTCatt
Copy link

LTCatt commented Feb 3, 2024

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

@ZhaiSoul
Copy link
Member Author

ZhaiSoul commented Feb 3, 2024

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

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

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

以下是我猜测的需求

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

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

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

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

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

@older-fox
Copy link

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

@8MiYile

This comment was marked as off-topic.

@z0z0r4
Copy link

z0z0r4 commented Feb 6, 2024

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

这不提供 mod 下载吧...

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

@ZhaiSoul ZhaiSoul added the 还需更多讨论 也许还需要更多的讨论 label Feb 7, 2024
@z0z0r4
Copy link

z0z0r4 commented Feb 11, 2024

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

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

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

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

@burningtnt
Copy link

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

@older-fox
Copy link

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

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

@zkitefly
Copy link

zkitefly commented Feb 11, 2024

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

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

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

@z0z0r4
Copy link

z0z0r4 commented Feb 11, 2024

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

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

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

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

@burningtnt
Copy link

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

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

@d3ara1n
Copy link

d3ara1n commented Apr 4, 2024

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

@z0z0r4
Copy link

z0z0r4 commented May 4, 2024

标准征求:

  • 当未缓存,即数据库无记录,不确定是否真的不存在

    • 拉取一份信息后返回源站结果(耗时可能较长)且容易触发阈值,目前是积累一定量后批量刷新缓存
    • 返回异常状态码,客户端自行拉取
      • 直接报 404
      • 自定义状态码表示未缓存不确定
  • 拉取的过期数据是否应该返回(返回的每份数据都有同步时间戳)

@burningtnt
Copy link

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

@zyxkad
Copy link

zyxkad commented May 4, 2024

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

@Silverteal
Copy link

Silverteal commented May 4, 2024

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

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

@z0z0r4
Copy link

z0z0r4 commented Jun 5, 2024

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

https://github.com/z0z0r4/mcim

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

提供 build PCL2HMCL

image

image

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

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

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

z0z0r4 added a commit to mcmod-info-mirror/HMCL that referenced this issue Jun 5, 2024
@LTCatt
Copy link

LTCatt commented Jun 5, 2024

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

@FloatSheep
Copy link

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

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

@z0z0r4
Copy link

z0z0r4 commented Jul 16, 2024

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

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

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

@LTCatt
Copy link

LTCatt commented Jul 16, 2024

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

@z0z0r4
Copy link

z0z0r4 commented Jul 18, 2024

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

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

@z0z0r4
Copy link

z0z0r4 commented Jul 19, 2024

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

Screenshot_20240719_152140.jpg

@burningtnt
Copy link

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

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

@Pigeon0v0
Copy link

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

试试 GitHub 配置 Secret?

@burningtnt
Copy link

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

试试 GitHub 配置 Secret?

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

@z0z0r4
Copy link

z0z0r4 commented Jul 19, 2024

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

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

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

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

@LTCatt
Copy link

LTCatt commented Jul 19, 2024

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

@allMagicNB
Copy link

UA 也能伪造。

@z0z0r4
Copy link

z0z0r4 commented Jul 19, 2024

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

我将来会加 UA 过滤

@z0z0r4
Copy link

z0z0r4 commented Jul 19, 2024

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

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

@LTCatt
Copy link

LTCatt commented Jul 19, 2024

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

@Silverteal
Copy link

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

@z0z0r4
Copy link

z0z0r4 commented Jul 19, 2024

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

ok,那就这么办吧

@z0z0r4
Copy link

z0z0r4 commented Aug 26, 2024

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

收回成见,请求流量还是能缓存到 50% 以上的...

image

@z0z0r4
Copy link

z0z0r4 commented Oct 13, 2024

{9FACCCB9-5A9A-4259-ACEA-0C6D97D6D742}

文件下载缺口巨大...急需有能力拉起文件下载的xd,实在无力

302 是回源的,301 是去 OpenMCIM 的

@LTCatt
Copy link

LTCatt commented Oct 13, 2024

能不能联系一下 OpenBMCLAPI 的支持方看看能不能也支持下 OpenMCIM?

@burningtnt
Copy link

目前,HCML 与 PCL2 已经双双跑通,可以直接替换 url,前瞻体验
仓库见 https://github.com/z0z0r4/PCL2https://github.com/z0z0r4/HMCL

我注意到 HMCL-dev/HMCL@main...mcmod-info-mirror:HMCL:main 这里你将 URL 中的 v1v2 删去了。这样做是有什么特别的考虑吗?

除此之外,目前如果资源没有缓存,是返回 404 还是 302 回原站?

@WorldHim

This comment has been minimized.

@pysio2007
Copy link

目前,HCML 与 PCL2 已经双双跑通,可以直接替换 url,前瞻体验
仓库见 https://github.com/z0z0r4/PCL2https://github.com/z0z0r4/HMCL

我注意到 HMCL-dev/[email protected]:HMCL:main 这里你将 URL 中的 v1v2 删去了。这样做是有什么特别的考虑吗?
除此之外,目前如果资源没有缓存,是返回 404 还是 302 回原站?

Image_1728830310793.png

我发现我晚上有点搞混了 未缓存文件是301会源 404是OpenMcim主控给出的状态码orz

@z0z0r4
Copy link

z0z0r4 commented Oct 19, 2024

能不能联系一下 OpenBMCLAPI 的支持方看看能不能也支持下 OpenMCIM?

@bangbang93

但不太现实…文件数量和文件总大小都远远超过当前的 openbmclapi…

@z0z0r4
Copy link

z0z0r4 commented Oct 19, 2024

目前,HCML 与 PCL2 已经双双跑通,可以直接替换 url,前瞻体验
仓库见 https://github.com/z0z0r4/PCL2https://github.com/z0z0r4/HMCL

我注意到 HMCL-dev/HMCL@main...mcmod-info-mirror:HMCL:main 这里你将 URL 中的 v1v2 删去了。这样做是有什么特别的考虑吗?

除此之外,目前如果资源没有缓存,是返回 404 还是 302 回原站?

该 pr 需要修改,失效了

如果 HMCL 有意愿我会提供相关支持

@burningtnt
Copy link

目前,HCML 与 PCL2 已经双双跑通,可以直接替换 url,前瞻体验
仓库见 https://github.com/z0z0r4/PCL2https://github.com/z0z0r4/HMCL

我注意到 HMCL-dev/[email protected]:HMCL:main 这里你将 URL 中的 v1v2 删去了。这样做是有什么特别的考虑吗?
除此之外,目前如果资源没有缓存,是返回 404 还是 302 回原站?

该 pr 需要修改,失效了

如果 HMCL 有意愿我会提供相关支持

我还是很好奇你这个镜像的规则。我可以先把这类内容合并入 PR Collection

@z0z0r4
Copy link

z0z0r4 commented Oct 19, 2024

目前,HCML 与 PCL2 已经双双跑通,可以直接替换 url,前瞻体验
仓库见 z0z0r4/PCL2z0z0r4/HMCL

我注意到 HMCL-dev/[email protected]:HMCL:main 这里你将 URL 中的 v1v2 删去了。这样做是有什么特别的考虑吗?
除此之外,目前如果资源没有缓存,是返回 404 还是 302 回原站?

该 pr 需要修改,失效了
如果 HMCL 有意愿我会提供相关支持

我还是很好奇你这个镜像的规则。我可以先把这类内容合并入 PR Collection

关于接口,姑且有文档,请问你稍微看过 README 了吗,值得怀疑...?https://mod.mcimirror.top/docs

关于未缓存的情况,请参考 缓存策略

未缓存的 Mod 信息会根据请求的 API 类型进行处理,当前缓存率已经够高了 MCIM statistics

  • 单个 Mod 相关请求会直接返回 404,因为无法确认到底是该 Mod 不存在还是未缓存入数据库
  • 多个 Mod 的相关请求会返回已经缓存的数据,例如同时通过接口请求 A、B 和 C Mod 的信息,A 不在数据库而 B 和 C 存在,会返回 B 和 C 的内容,并标识为 trustable: False,全都不存在则仿照源站 API 的规则响应

除此之外,目前如果资源没有缓存,是返回 404 还是 302 回原站?

此处资源要分 API 信息还是文件,API 信息见上

如果指的是以下文件下载的接口,未被 MCIM 缓存的直接回源

  • /data/{project_id}/versions/{version_id}/{file_name}
  • /files/{fileid1}/{fileid2}/{file_name}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
还需更多讨论 也许还需要更多的讨论
Projects
None yet
Development

No branches or pull requests

17 participants