Мне интересно, можно ли собирать необработанные HTTP-данные в Cloud Endpoint. Я не могу найти ничего в документации Google, но App Engine Twitter сказал мне, что это было (https://twitter.com/app_engine/status/305747445017624576). Если да, могу ли я получить синтаксис? Я знаю, что API для GCE все еще находится на ранней стадии, и любая помощь будет с благодарностью.
Получение необработанных HTTP-данных (заголовков, файлов cookie и т.д.) В облачных конечных точках Google
Ответ 1
Добавьте параметр 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();
...
}
Ответ 2
Запрос доступен в методе Endpoints как внедренный тип. Объект типа 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
Цитирование из вышеуказанной документации:
Введенные типы
Внедренные типы - это те типы, которые обрабатываются фреймворками оконечных точек облака. Если такой тип используется в качестве параметра метода, он не становится частью API. Вместо этого параметр заполняется фреймворками конечных точек.
Введены следующие типы:
com.google.appengine.api.users.User
javax.servlet.http.HttpServletRequest
javax.servlet.ServletContext