Мне интересно, можно ли собирать необработанные данные HTTP в облачной конечной точке. Кажется, я ничего не могу найти в документации Google, но Twitter App Engine сказал мне, что это было (https://twitter.com/app_engine/status/305747445017624576). Если да, могу ли я получить синтаксис для этого? Я знаю, что API для GCE все еще находится на ранней стадии, и любая помощь будет принята с благодарностью.
Получение необработанных данных HTTP (заголовки, файлы cookie и т. д.) в конечных точках Google Cloud
Ответы (2)
Добавьте параметр HttpServletRequest в метод конечной точки, например.
@ApiMethod
public MyResponse getResponse( HttpServletRequest req, @Named("infoId") String infoId ) {
// Use 'req' as you would in a servlet, e.g.
String ipAddress = req.getRemoteAddr();
...
}
Запрос доступен в методе конечных точек как внедренный тип. Объект типа HttpServletRequest
невидимо внедряется в ваше определение метода Java, когда вы объявляете параметр метода, который имеет этот тип, например:
import javax.servlet.http.HttpServletRequest;
...
@ApiMethod
public MyMethod getRequest( HttpServletRequest req ) {
HttpServletRequest myRequest = req;
...
}
Это задокументировано здесь:
https://cloud.google.com/endpoints/docs/frameworks/java/parameter-and-return-types#injected_types
Цитата из приведенной выше документации:
Введенные типы
Внедренные типы — это типы, которые обрабатываются Cloud Endpoints Frameworks особым образом. Если такой тип используется в качестве параметра метода, он не становится частью API. Вместо этого параметр заполняется Endpoints Frameworks.
Вводимые типы следующие:
com.google.appengine.api.users.Пользователь
javax.servlet.http.HttpServletRequest
javax.servlet.ServletContext