2013-06-14 13 views
6

Có ai biết máy chủ web nguồn mở, được viết bằng Java, có khả năng lưu trữ các dịch vụ REST trên Android không?Làm cách nào để lưu trữ các dịch vụ web REST trên Android?

Tôi đang nghiêng về phía https://github.com/NanoHttpd/nanohttpd, nhưng sẽ yêu cầu viết khung dịch vụ web từ đầu.

ps. Websockets sẽ là một lợi thế. ps2. Tôi đang tìm kiếm một giải pháp lưu trữ không phải là khách hàng và thiết bị đủ mạnh.

Trả lời

6

Có nhiều máy chủ HTTP của bên thứ ba cho Android. Ngoài ra, vì API cấp 1 Android đã có HttpService: http://developer.android.com/reference/org/apache/http/protocol/HttpService.html được tích hợp sẵn.

Bất kỳ máy chủ HTTP nào cũng có khả năng "REST". Nếu bạn có nghĩa là bạn muốn có một khung REST phía máy chủ cho Android (ala JAX-RS hoặc Restlet hoặc như vậy) thì đó là một khách hàng tiềm năng khác và tôi không quen với một trong đó sẽ chạy ra khỏi hộp trên Android (mặc dù họ có thể tồn tại). Lý do là bạn thường không chạy máy chủ HTTP trên thiết bị di động. Có, bạn có thể, và tại một số thời điểm nó có ích, nhưng nó không chỉ là một yêu cầu chung.

Đối với websockets, đó là một câu hỏi hoàn toàn khác và không liên quan gì đến REST (vì vậy điều đó gây nhầm lẫn?). Ngoài ra còn có nhiều websocket impls cho Android (koush's, ví dụ: https://github.com/koush/android-websockets).

3

Nếu bạn có ý định lưu trữ dịch vụ web của mình từ thiết bị Android. Đó là một trường hợp bất thường nhưng khung công tác khôi phục lại có một thành phần máy chủ chạy trên Android. Thanh toán http://restlet.org/learn/guide/2.2/editions/android/.

Nó không yêu cầu máy chủ web riêng biệt và khá gọn gàng. Tôi đã không thử nó như một máy chủ android cá nhân vì vậy không thể xác minh cho nó hoạt động tốt như thế nào nhưng tôi đã sử dụng nó độc lập và trên appengine.

Bạn nên nhận được ngay với một cái gì đó giống như chỉ gói dưới mã trong một Android Dịch vụ

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(); 
9

Đối mặt với một vấn đề tương tự, chúng tôi chọn để đi với AndroidAsync Koush của:

https://github.com/koush/AndroidAsync

Đây là một dự án khá tiện dụng vì nhiều lý do. Ngoài việc hỗ trợ các ổ cắm web, bạn có thể, trong một vài dòng, triển khai trình xử lý POST hoặc GET cơ bản và chuyển JSON xung quanh đó là loại tất cả những gì chúng tôi cần. Ví dụ từ trang github đó (hỗ trợ POST theo cùng một cách):

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!!!