GroovletでRestfulなサービスを作る方法

Restfulな、というと語弊がありそうだけど、要するにXMLを返すようにする方法。

まずは、Groovy+GrailsでRailsなWeb開発:CodeZine(コードジン)の記事を参照して、GAE上にGroovletでデータを登録できるフォーム画面を作る。んで、GroovyとGoogle App Engineでアプリ開発(後編) ~Googleのサービスを利用する方法
(5/6):CodeZine
に、格納した値をHTMLで表示させる方法が載っているけど、この代わりに単純なXMLを返すようにして、Flexで取り扱いやすいようにするのが今回の狙い。

web.xml

<servlet>
	<servlet-name>listXml</servlet-name>
	<servlet-class>listXml</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>listXml</servlet-name>
	<url-pattern>/listXml.xml</url-pattern>
</servlet-mapping>

と追加して、listXml.groovyファイルをsrc直下に作る。これで完成。

import org.apache.tools.ant.taskdefs.Mkdir
import teppeistudio.chienavi.SampleData
import javax.servlet.http.*
import javax.jdo.*
import java.nio.charset.*
import groovy.xml.*


class listXml extends HttpServlet
{
    void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException
    {
		List<SampleData> datas = new ListServlet().getList()
    	def xml = new StreamingMarkupBuilder().bind
    	{
    		mkp.xmlDeclaration()
    		
    		list
    		{
    			for(SampleData ob:datas)
    			{
    				println "id:" + ob.getId() + ", data:" + ob.getData()
    				rec(id:ob.getId(), data:ob.getData());
    			}
    		}
    	}
    	resp.setContentType("text/xml; charset=UTF-8")
    	resp.writer.println xml
    }
    
    void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException
    {
        resp.sendRedirect("/listXml")
    }
}

いや〜。setContentTypeでちょっとはまった。

しかしこれでGAEのデータストアを利用したRestfulサービスを作れるゾ。
Flexと組み合わせればかなりいい感じになるはず★