note description : "REST Buck server" date : "$Date$" revision : "$Revision$" class RESTBUCKS_SERVER_EXECUTION inherit WSF_ROUTED_SKELETON_EXECUTION undefine requires_proxy end WSF_NO_PROXY_POLICY SHARED_RESTBUCKS_API create make feature {NONE} -- Initialization setup_router local doc: WSF_ROUTER_SELF_DOCUMENTATION_HANDLER do setup_order_handler (router) create doc.make_hidden (router) router.handle ("/api/doc", doc, router.methods_GET) -- Those 2 following routes are not for the REST api, but mainly to make simpler to test this example. router.handle ("/", create {WSF_URI_AGENT_HANDLER}.make (agent handle_home), router.methods_GET) router.handle ("/new_order", create {WSF_URI_AGENT_HANDLER}.make (agent handle_new_order), router.methods_GET) end setup_order_handler (a_router: WSF_ROUTER) local order_handler: ORDER_HANDLER do create order_handler.make ("orderid", a_router) router.handle ("/order", order_handler, router.methods_POST) router.handle ("/order/{orderid}", order_handler, router.methods_GET + router.methods_DELETE + router.methods_PUT) end feature -- Handler handle_home (req: WSF_REQUEST; res: WSF_RESPONSE) local l_page: WSF_HTML_PAGE_RESPONSE l_html: STRING do create l_page.make create l_html.make_empty l_html.append ("

RESTbucks example (a Create-Read-Update-Delete REST API)

%N") l_html.append ("") l_page.set_body (l_html) l_page.set_title ("RESTbucks example") res.send (l_page) end handle_new_order (req: WSF_REQUEST; res: WSF_RESPONSE) local o: ORDER redir: WSF_REDIRECTION_RESPONSE do create o.make_empty o.set_location ("TakeAway") o.add_item (create {ORDER_ITEM}.make ("late", "large", "whole", 1)) o.add_item (create {ORDER_ITEM}.make ("expresso", "small", "skim", 2)) submit_order (o) create redir.make (req.absolute_script_url ("/order/" + o.id)) redir.set_content ("Order " + o.id + " created.", Void) res.send (redir) end note copyright: "2011-2017, Javier Velilla and others" license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" source: "[ Eiffel Software 5949 Hollister Ave., Goleta, CA 93117 USA Telephone 805-685-1006, Fax 805-685-6869 Website http://www.eiffel.com Customer support http://support.eiffel.com ]" end