2009-07-28 29 views
6

Google App Engineは、htmlなどを返すWebアプリケーションをホストできることがわかります。しかし、http経由で通信し、xmlを受け入れる/返すWebサービスはどうでしょうか?Google App Engineを使用したWebサービス

これはPythonのGoggle App EngineやJavaの場合(JAS-WXはサポートされていません)どのように行われているのですか?サンプルや記事へのリンクは大変ありがたいです。

おかげ// :)

答えて

9

Google App Engineが使用すると、HTTPレスポンスのコンテンツの任意の型を返すWebサービスを作成することができます。これは、例えば、XML、JSON、テキストなど

を含み、プレーンテキスト/として戻ってくるHTTPレスポンスを示しているGoogleが提供guestbook sample projectを見てみましょう:

さらに
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())); 
      } 
     } 
    } 

app engine google groupがありますより多くを学び、質問したり、サンプルコードを見るのに最適な場所です。

3

ほとんどのpythonのアプリはちょうど直接形のXMLを出力ハンドラを記述...この例では、ルートURL(「/」)に提出されたGETリクエストを提供しています:

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

それは間違いなく可能だ(とは非常に難しい)、GAEを使用して "httpで通信し、xmlを受け入れ/返すウェブサービス"をホストする。

XMLリクエストを解析するには(おそらくHTTP POSTまたはPUTリクエストの本体として送られます)、いくつかのオプションがあります。 pyexpatまたはminidomの上に表示されます(例:this thread、特にその最後の投稿)。

は、あなたはまた、例えば、その後、フォーマットされた応答とあなたのminidomインスタンスのwritexmlメソッドの引数としてのwrite方法を保持するためにStringIOインスタンスを使用して周りに回す(XMLレスポンスとバックwriteそれを構築するためにminidomを使用することができ、希望する場合そのインスタンスのgetvalueを使用して、必要な結果を文字列として取得します)。純粋なPythonに限定されていて、pyexpatのようなCコードの拡張子をいくつか "whiteslisted"しても、あなたの選択肢はそれほど制限されておらず、あなたの人生は大幅に難しくなりません。

あなたのレスポンスのコンテンツタイプヘッダーをtext/xmlに設定することを覚えておいてください(もちろん、もしあれば、より具体的で適切なメディアタイプもあります)。 - UTF-8(標準テキストあなたのデータが平易なASCIIであるならばASCIIである間にすべてのUnicodeを表現することができます! - )、奇妙な "コードページ"やISO-8859ファミリのような地域限定のコードではありません。

関連する問題