tryzealot/zealot

[Bug]: 应用最新版本API的接口文档与其代码行为不一致

Closed this issue · 2 comments

部署方式 | How to Deploy

Docker (Default)

部署版本 | Version

5.1.0

Git 哈希值 (长度 40)| Git Ref (40 length)

c30d95d

反代服务 | Reverse Proxy

nginx

HTTPS 证书类型 | HTTPS(SSL)

可受信任的证书 Verified SSL

已阅读文档 | Read the document

  • 已阅读 | Yes

描述 | Description

应用最新版本API接口 的文档地址:
https://zealot.ews.im/zh-Hans/docs/developer-guide/api/apps#%E5%BA%94%E7%94%A8%E6%9C%80%E6%96%B0%E7%89%88%E6%9C%AC

应用最新版本API接口 的实现代码:

# frozen_string_literal: true
class Api::Apps::LatestController < Api::BaseController
before_action :validate_channel_key
# GET /api/apps/latest
def show
headers['Last-Modified'] = Time.now.httpdate
render json: @channel,
serializer: Api::LatestAppSerializer,
bundle_id: params[:bundle_id],
release_version: params[:release_version],
build_version: params[:build_version]
end
end

根据文档要求给出参数:channel_key,release_version,build_version,无法获取期望的结果(releases字段为空数组)
请求:

https://tryzealot.ews.im/api/apps/latest?channel_key=450efee74e19e357137094790fbcdee8&release_version=0&build_version=0

响应:

{
    "app_name": "测试2 Production Android",
    "bundle_id": "*",
    "git_url": null,
    "app": {
        "id": 413,
        "name": "测试2"
    },
    "scheme": {
        "id": 775,
        "name": "Production"
    },
    "releases": []
}

根据代码要求给出参数:channel_key,bundle_id,release_version,build_version,可以获取期望的结果
请求:

https://tryzealot.ews.im/api/apps/latest?channel_key=450efee74e19e357137094790fbcdee8&release_version=0&build_version=0&bundle_id=com.example.myapplication

响应:

{
    "app_name": "测试2 Production Android",
    "bundle_id": "*",
    "git_url": null,
    "app": {
        "id": 413,
        "name": "测试2"
    },
    "scheme": {
        "id": 775,
        "name": "Production"
    },
    "releases": [
        {
            "version": 1,
            "app_name": "测试2 Production Android",
            "bundle_id": "com.example.myapplication",
            "release_version": "1.2.3",
            "build_version": "123",
            "source": "web",
            "branch": "",
            "git_commit": "",
            "ci_url": "",
            "size": 4567453,
            "platform": "Android",
            "device_type": "phone",
            "icon_url": "https://tryzealot.ews.im/uploads/apps/a413/r4023/icons/sK.png",
            "install_url": "https://tryzealot.ews.im/download/releases/4023",
            "changelog": [],
            "text_changelog": "",
            "custom_fields": [],
            "created_at": "2024-03-15T18:41:30.799+08:00"
        }
    ]
}

但是获取的结果 releases字段是一个数组,而文档中releases字段是一个对象而不是数组,与文档示例不一样.
文档中响应示例

{
    "app_name": "Zealot iOS 测试版",
    "bundle_id": "*",
    "git_url": null,
    "app": {
        "id": 3,
        "name": "Zealot"
    },
    "scheme": {
        "id": 5,
        "name": "测试版"
    },
    "releases": {
        "version": 1,
        "app_name": "Zealot iOS 测试版",
        "bundle_id": "im.ews.zealot",
        "release_version": "1.0.0",
        "build_version": "10291524",
        "source": "Web",
        "branch": "",
        "git_commit": "",
        "ci_url": "",
        "size": 79712596,
        "icon_url": "https://tryzealot.ews.im/uploads/apps/a3/r21/icons/8ab13dc08321f9f3412a9fa98689d9c3.png",
        "install_url": "itms-services://?action=download-manifest&url=https://tryzealot.ews.im/api/apps/O1qHk/1/install",
        "changelog": [],
        "created_at": "2019-12-25T14:26:06.608+08:00"
    }
}

我觉得API既然是/api/apps/latest,其中latest意味着最新的,是最高级(superlative degree)表示在一组中具有最高程度的特征,应该只返回最新的一个版本即可,不用返回多个版本

问题日志 | Relevant log output

No response

我对于这个的定义是,接口允许传递版本参数,可以获取请求版本至最新版本中的所有版本。所以 latest 表示一个最新版本的集合。这点跟国外 latest news, latest articles 是一样的,它是当前时间倒序的最新新闻和文字列表,而不是单一个体。

如果你需要获取最新的版本,只需要获取数组中第一个即可。所以 latest 在对你和对我来说标准不一样。

非常感谢您的详细解答!您的回复帮助了我解决了疑惑。如果我有任何其他问题,我会再次联系您。再次感谢您的耐心和帮助!