Кто-нибудь знает веб-сервер с открытым исходным кодом, написанный на Java, способный размещать сервисы REST на Android?
Я склоняюсь к https://github.com/NanoHttpd/nanohttpd, но для этого потребуется создать структуру веб-сервисов с нуля.
пс. Websockets будет плюсом. ps2. Я ищу решение хостинга, а не клиент и устройство достаточно мощное.
Перед аналогичной проблемой мы решили пойти с Koush AndroidAsync:
https://github.com/koush/AndroidAsync
Это довольно удобный проект по целому ряду причин. В дополнение к поддержке websockets вы можете в нескольких строках реализовать базовый обработчик POST или GET и передать JSON, вокруг которого это все, что нам нужно. Пример из этой страницы github (поддерживает POST таким же образом):
AsyncHttpServer server = new AsyncHttpServer();
List<WebSocket> _sockets = new ArrayList<WebSocket>();
server.get("/", new HttpServerRequestCallback() {
@Override
public void onRequest(AsyncHttpServerRequest request, AsyncHttpServerResponse response) {
response.send("Hello!!!");
}
});
// listen on port 5000
server.listen(5000);
// browsing http://localhost:5000 will return Hello!!!
Существует много сторонних HTTP-серверов для Android. Кроме того, поскольку API уровня 1 Android имеет HttpService: http://developer.android.com/reference/org/apache/http/protocol/HttpService.html, встроенный.
Любой HTTP-сервер "способен" REST.
Если вы имеете в виду, что вам нужна инфраструктура REST на стороне сервера для Android (ala JAX-RS или Restlet или таковая), то это другая перспектива, и я не знаком с тем, который будет работать из коробки на Android (хотя они, вероятно, действительно есть). Причина этого заключается в том, что вы обычно не запускаете HTTP-сервер на мобильном устройстве. Да, вы можете, и в определенное время это удобно, но это просто не общее требование.
Что касается websockets, это совершенно другой вопрос и не имеет ничего общего с REST (так что это путает?). Также есть множество приложений для Android (koush's, например: https://github.com/koush/android-websockets).
HttpService
устарел с 22 уровня API.
Если вы намереваетесь размещать свои веб-сервисы с устройства Android. Это необычный случай, но в структуре restlet есть серверный компонент, который работает на android. Оформить заказ http://restlet.org/learn/guide/2.2/editions/android/.
Он не требует отдельного веб-сервера и довольно скудный. Я не пробовал его как сервер андроида лично, поэтому не могу ручаться за то, насколько хорошо он работает там, но я использовал его автономно и на appengine.
Вам нужно уйти с чем-то вроде обертывания под кодом в службе Android
Component serverComponent = new Component();
serverComponent.getServers().add(Protocol.HTTP, 8080);
final Router router = new Router(serverComponent.getContext().createChildContext());
router.attach("/myrestendpoint", MyServerResource.class);
serverComponent.getDefaultHost().attach(router);
serverComponent.start();