You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

迁移Google EndPoint 2.0后:404错误且请求指向spi而非api

Google Cloud Endpoints 1.0 → 2.0迁移后Android端404问题排查方案

我之前踩过类似的迁移坑,给你梳理几个关键排查点,一步步来定位问题:

1. 后端配置彻底检查

先确认你的web.xml是不是完全切换到2.0的配置逻辑:

  • 把旧的SystemServiceServlet替换为2.0的EndpointsServlet:
    <servlet>
      <servlet-name>EndpointsServlet</servlet-name>
      <servlet-class>com.google.api.server.spi.EndpointsServlet</servlet-class>
      <init-param>
        <param-name>services</param-name>
        <param-value>你的API服务类全路径</param-value>
      </init-param>
    </servlet>
    
  • 确保servlet映射是/_ah/api/*,并且删除所有旧的/_ah/spi/*映射,避免路径冲突:
    <servlet-mapping>
      <servlet-name>EndpointsServlet</servlet-name>
      <url-pattern>/_ah/api/*</url-pattern>
    </servlet-mapping>
    
  • 检查依赖:移除1.0的com.google.appengine:appengine-endpoints,替换为2.0的com.google.endpoints:endpoints-framework:2.2.2(或最新稳定版),同时确认appengine-web.xml里没有残留1.0的配置项。

2. 重新生成Android客户端代码

这是最容易忽略的关键步骤!Endpoints 2.0的客户端库结构和1.0完全不同,旧的客户端代码会默认调用/_ah/spi路径,必须重新生成:

  • 如果用Gradle插件,确保使用com.google.cloud.tools.endpoints-framework-gradle-plugin(而非旧的appengine-endpoints插件),然后运行endpointsClientLibs任务生成新的客户端代码。
  • 手动生成的话,用2.0的Endpoint Framework Tools替代1.0的Google App Engine SDK工具,生成后替换Android项目里所有旧的Endpoint相关类,确保请求路径指向/_ah/api。

3. 部署与缓存清理

有时候部署后App Engine会有缓存残留,导致旧配置依然生效:

  • 用gcloud app deploy重新部署后端,可加上--version指定新版本,或者直接覆盖旧版本。
  • 部署完成后等待3-5分钟让配置完全生效,再测试API explorer,同时查看最新的App Engine日志,确认请求路径是否已切换为/_ah/api。

4. 排查API注解与服务注册

检查你的API服务类注解是否符合2.0规范:

  • 确保使用com.google.api.server.spi.config.Api注解,而非旧的com.google.appengine.api.endpoints.Api。
  • 注解里的name、version和命名空间要正确配置,示例:
    @Api(name = "myapi", version = "v1", namespace = @ApiNamespace(ownerDomain = "yourdomain.com", ownerName = "yourdomain.com"))
    public class MyApiService {
      // 你的API方法实现
    }
    
  • 确认web.xml里的services参数包含了所有API服务类的全路径,没有遗漏。

5. 日志与请求追踪

如果API explorer显示请求是/_ah/api但日志里是/_ah/spi,可以做这些验证:

  • 用curl直接调用API的/_ah/api路径,比如curl https://your-app-id.appspot.com/_ah/api/myapi/v1/yourmethod,查看返回结果和日志记录的路径是否一致。
  • 检查是否有反向代理、Cloud CDN或者App Engine的URL转发规则修改了请求路径。

内容的提问来源于stack exchange,提问作者Thomas Fischer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:43:42