2016-09-25 5 views
2

среды
Я бегу AppEngine Облако Endpoints с Bootstrap JavaScript UI и Google SQL Datastore.Google Cloud Endpoints API Получает 404

Проблема
Когда Javascript вызывает gapi.client.load он получает 404. API работы проводника и JavaScript работает при запуске локально ... Это просто при попытке загрузить API с помощью JavaScript, что я получаю провал.

Вот ошибка, как представляется, в Chrome:

GET https://MyAppID.appspot.com/_ah/api/discovery/v1/apis/myAP…%2Cversion%2CrootUrl%2CservicePath%2Cresources%2Cparameters%2Cmethods&pp=0 404  () 
zu @ cb=gapi.loaded_0:83 
n @ cb=gapi.loaded_0:83C 
u @ cb=gapi.loaded_0:83 
(anonymous function) @ cb=gapi.loaded_0:84 
g @ cb=gapi.loaded_0:55 
c @ cb=gapi.loaded_0:46 

Это затем следуют еще кроме «Не удается прочитать свойство», потому что он не может найти метод в API, что он не сработал.

Код

Код для моей страницы index.html:

 function init() 
     { 

      apisToLoad = 2; 

      var callback = function() 
      { 
       if (--apisToLoad == 0) 
       { 
         signin(true, userAuthed); 
        } 
      } 

      gapi.client.load('oauth2', 'v2', callback); 
      //LOCALCHANGE (SWITCH BETWEEN LOCAL AND NOT) 
      gapi.client.load('myAPI', 'v1', callback, 'https://MyAppId.appspot.com/_ah/api'); 
      //gapi.client.load('myAPI', 'v1', callback, 'http://localhost:8080/_ah/api'); 

     } 

Я думаю, что это правильно, так что я тоже буду включать мою appengine.xml:

<?xml version="1.0" encoding="utf-8"?> 
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> 
<application>MyAppID</application> 
<version>1</version> 
<threadsafe>true</threadsafe> 
<use-google-connector-j>true</use-google-connector-j> 

<system-properties> 
    <property name="java.util.logging.config.file" value="WEB-INF/logging.properties"/> 
</system-properties> 
</appengine-web-app> 

и мой 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.lthoi.myAPI</param-value> 
    </init-param> 
</servlet> 
<servlet-mapping> 
    <servlet-name>SystemServiceServlet</servlet-name> 
    <url-pattern>/_ah/spi/*</url-pattern> 
</servlet-mapping> 
<welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
</welcome-file-list> 
</web-app> 

Если кто-нибудь может подумать о другом, что может быть ошибкой, я был бы счастлив вставить другие файлы.

+0

Проверьте журналы приложений для запросов '/ _ah/spi/BackendService.getApiConfig' или'/_ah/spi/BackendService.logMessages'. Если есть ошибки, вам необходимо их исправить. – saiyr

ответ

0

У меня такая же проблема, как и у. Похоже, что Google имеет глюк с WebAPP конечными точками, что вызвало эту проблему в течение достаточно долгого времени теперь ...

Ссылка на предыдущие сообщения о нем: https://github.com/google/google-api-javascript-client/issues/147

(СРЮ для сдачи пост как ответ, не комментарий, только что создал учетную запись)

+0

Моя проблема была иной, чем эта. Я заметил эту проблему. –

0

В gapi.client.load запрашивается обнаружение, чтобы получить информацию о методе API (см. часть обнаружения на URL-адресе, которая дает вам 404). В настоящее время обнаружение не поддерживается в облачных конечных точках.

Чтобы работать, вы можете попробовать напрямую обратиться к API (на самом деле я не совсем уверен, будет ли это работать). например

gapi.client.request({ 
    // Use your own service address, URI path, and query parameters. 
    'root': 'https://your-domain.appspot.com', 
    'path': '_ah/api/foo/bar', // use your own service path 
    'params': { 
    "foo": "bar" 
    } 
}).then(
    function(resp) { 
    console.log(resp); 
    }, 
    function(err) { 
    console.log(err); 
}); 

Надеюсь, это поможет.

(Обратите внимание, что функция CORS в предыдущих редактированиях этого ответа является экспериментальной, не имеющими документами, и без поддержки, но была использована в этом ответе для отладки. Линия для включения CORS была удалена.)

+0

Спасибо за вашу попытку помочь, см. Выше, моя проблема была немного более простой (плохая капитализация) –

0

Итак, проблема здесь была, к сожалению, одной из капитализации. У меня был правильный URL-адрес, но я попытался загрузить 'myAPI' вместо 'MyAPI', как я написал его в MyAPI.java. Обратите внимание, что в этом случае важно значение в аннотации, а не имя класса. Надеюсь, это найдет любого, кто такой же глупый, как я!

Смежные вопросы