我已经通过使用this blog post中所述的Generate AppEngine BackEnd在Eclipse中生成了一个Google Endpoint AppEngine项目。但是,该帖子未描述什么,以及官方Google文档也描述得不好,我可以在本地访问该服务的是哪个URL?

生成的服务具有一个生成的终结点,称为DeviceInfoEndpoint。下面显示了代码以及web.xml中的代码。如果我在本地端口8888上托管,应该使用哪个URL访问listDeviceInfo()?我尝试了以下方法:

  • http://localhost:8888/_ah/api/deviceinfoendpoint/v1/listDeviceInfo => 404
  • http://localhost:8888/_ah/spi/deviceinfoendpoint/v1/listDeviceInfo => 405 GET不支持
  • http://localhost:8888/_ah/spi/deviceinfoendpoint/v1/DeviceInfo => 405 GET(...)
  • http://localhost:8888/_ah/spi/v1/deviceinfoendpoint/listDeviceInfo => 405 GET(...)

  • DeviceInfoEndpoint.java的摘录:
    @Api(name = "deviceinfoendpoint")
    public class DeviceInfoEndpoint {
    
    /**
     * This method lists all the entities inserted in datastore.
     * It uses HTTP GET method.
     *
     * @return List of all entities persisted.
     */
    @SuppressWarnings({ "cast", "unchecked" })
    public List<DeviceInfo> listDeviceInfo() {
        EntityManager mgr = getEntityManager();
        List<DeviceInfo> result = new ArrayList<DeviceInfo>();
        try {
            Query query = mgr
                    .createQuery("select from DeviceInfo as DeviceInfo");
            for (Object obj : (List<Object>) query.getResultList()) {
                result.add(((DeviceInfo) obj));
            }
        } finally {
            mgr.close();
        }
        return result;
    }
    }
    

    Web.xml:
    <?xml version="1.0" encoding="utf-8" standalone="no"?><web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    
     <servlet>
      <servlet-name>SystemServiceServlet</servlet-name>
      <servlet-class>com.google.api.server.spi.SystemServiceServlet</servlet-class>
      <init-param>
       <param-name>services</param-name>
       <param-value>com.example.dummyandroidapp.DeviceInfoEndpoint</param-value>
      </init-param>
     </servlet>
     <servlet-mapping>
      <servlet-name>SystemServiceServlet</servlet-name>
      <url-pattern>/_ah/spi/*</url-pattern>
     </servlet-mapping>
    </web-app>
    

    最佳答案

    API请求路径通常应符合以下条件:

    http(s)://{API_HOST}:{PORT}/_ah/api/{API_NAME}/{VERSION}/
    

    如果您对获取/更新/删除特定资源感兴趣,请在末尾添加一个ID。在您的示例中,这建议您应查询:
    http://localhost:8888/_ah/api/deviceinfoendpoint/v1/
    

    (当您发出list请求时,它会映射到GET)。

    通常,可以通过/_ah/_api/explorer获得的API Explorer,轻松发现和查询这些URL。

    09-12 18:14