2009-07-28 43 views
6

Tôi thấy rằng Google App Engine có thể lưu trữ các ứng dụng web sẽ trả về html, v.v ... Nhưng dịch vụ web giao tiếp qua http và chấp nhận/trả lại xml thì sao?Dịch vụ web với Google App Engine

Có ai biết cách thực hiện việc này trong Công cụ ứng dụng của Goggle bằng Python hay cho vấn đề đó trong Java (JAS-WX không được hỗ trợ) không? Bất kỳ liên kết o mẫu hoặc bài viết được đánh giá rất nhiều.

Cảm ơn // :)

Trả lời

9

Google App Engine cho phép bạn viết các dịch vụ web trả về bất kỳ loại nội dung phản hồi HTTP nào. Điều này bao gồm xml, json, văn bản, vv

Ví dụ, hãy nhìn vào các guestbook sample project được cung cấp bởi Google trong đó cho thấy các phản ứng HTTP trở lại như text/plain:

public class GuestbookServlet extends HttpServlet { 
     public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { 
      UserService userService = UserServiceFactory.getUserService(); 
      User user = userService.getCurrentUser(); 

      if (user != null) { 
       resp.setContentType("text/plain"); 
       resp.getWriter().println("Hello, " + user.getNickname()); 
      } else { 
       resp.sendRedirect(userService.createLoginURL(req.getRequestURI())); 
      } 
     } 
    } 

Thêm vào đó, app engine google group là một nơi tuyệt vời để tìm hiểu thêm, đặt câu hỏi và xem mã mẫu.

3

Hầu hết các ứng dụng python chỉ cần viết một handler mà kết quả đầu ra xml hình trực tiếp ... ví dụ này phục vụ các yêu cầu GET nộp cho cơ url gốc ("/"):

import wsgiref.handlers 

from google.appengine.ext import webapp 

class MainHandler(webapp.RequestHandler): 

    def get(self): 
    self.response.out.write('<myXml><node id=1 /></myXml>') 

def main(): 
    application = webapp.WSGIApplication([('/', MainHandler)], 
             debug=True) 
    wsgiref.handlers.CGIHandler().run(application) 

if __name__ == '__main__': 
    main() 
2

Đó chắc chắn là có thể (và không quá khó) để sử dụng GAE để lưu trữ "các dịch vụ web giao tiếp qua http và chấp nhận/trả lại xml".

Để phân tích cú pháp các yêu cầu XML (có lẽ đến trong cơ thể của các yêu cầu HTTP POST hoặc PUT), bạn có một số tùy chọn, ví dụ: pyexpat hoặc minidom trên đầu trang của nó, xem this thread ví dụ (đặc biệt là bài viết cuối cùng trên nó).

Nếu bạn muốn, bạn cũng có thể sử dụng minidom để xây dựng các phản ứng XML và write nó trở lại (ví dụ sử dụng một trường hợp StringIO tổ chức đáp ứng được định dạng và phương pháp write của nó như là đối số cho phương pháp dụ minidom của bạn writexml, sau đó quay xung quanh và sử dụng getvalue của cá thể đó để nhận kết quả cần thiết dưới dạng chuỗi). Mặc dù bạn bị giới hạn trong Python thuần túy và một vài phần mở rộng được mã hóa bằng chữ C "whiteslisted" như pyexpat, điều đó không thực sự hạn chế lựa chọn của bạn nhiều, cũng như làm cho cuộc sống của bạn khó khăn hơn nhiều.

Chỉ cần nhớ đặt tiêu đề loại nội dung phản hồi của bạn thành text/xml (hoặc một số loại phương tiện cụ thể hơn và phù hợp hơn, nếu có!) - và, tôi khuyên bạn nên sử dụng UTF-8 (văn bản chuẩn mã hóa cho phép bạn thể hiện tất cả Unicode trong khi ASCII thuần túy nếu dữ liệu của bạn xảy ra là ASCII đơn giản!), không phải là "các trang mã" lạ hoặc các mã giới hạn theo vùng như họ ISO-8859.

Các vấn đề liên quan