怎么使用 Yesod 开发 http REST API 服务?

21 views
Skip to first unread message

Zoom.Quiet

unread,
Apr 26, 2012, 11:13:15 AM4/26/12
to hask...@googlegroups.com, haske...@googlegroups.com
俺不需要输出 html 页面,只是:
- 可以获取 GET/POST 来的数据
- 以 JSON 格式返回结果
- 可以向其它网站发出 GET 的查询请求,并收集到返回数据
- 可以保存数据到远端的 MongoDB

分别都有简单的实例代码进行学习嘛?

--
人生苦短, Pythonic! 冗余不做,日子甭过!备份不做,十恶不赦!
俺: http://about.me/zoom.quiet
文字协议: http://creativecommons.org/licenses/by-sa/2.5/cn/

yi huang

unread,
Apr 26, 2012, 10:07:29 PM4/26/12
to zoom....@gmail.com, hask...@googlegroups.com, haske...@googlegroups.com
2012/4/26 Zoom.Quiet <zoom....@gmail.com>

俺不需要输出 html 页面,只是:
- 可以获取 GET/POST 来的数据
- 以 JSON 格式返回结果
- 可以向其它网站发出 GET 的查询请求,并收集到返回数据
- 可以保存数据到远端的 MongoDB

分别都有简单的实例代码进行学习嘛?

我都直接用wai/warp开发这类服务,写了一个很简单的例子,定时从远程服务更新数据放在内存里,接受http请求返回缓存的数据,刚启动时更新得不及时的话,http请求会阻塞到缓存填满,没有加入写mongodb的部分。
Simple.hs 是直接缓存字符串,JsonService.hs 是缓存结构化数据。

 

--
人生苦短, Pythonic! 冗余不做,日子甭过!备份不做,十恶不赦!
俺: http://about.me/zoom.quiet
文字协议: http://creativecommons.org/licenses/by-sa/2.5/cn/

--
您收到此邮件是因为您订阅了 Google 网上论坛的“HaskellCUG”论坛。
要向此网上论坛发帖,请发送电子邮件至 haske...@googlegroups.com
要取消订阅此网上论坛,请发送电子邮件至 haskellcug+...@googlegroups.com
若有更多问题,请通过 http://groups.google.com/group/haskellcug?hl=zh-CN 访问此网上论坛。




--
http://yi-programmer.com/

Zoom.Quiet

unread,
Apr 26, 2012, 10:19:12 PM4/26/12
to yi huang, hask...@googlegroups.com, haske...@googlegroups.com
在 2012年4月27日 上午10:07,yi huang <yi.cod...@gmail.com> 写道:
> 2012/4/26 Zoom.Quiet <zoom....@gmail.com>
>
>> 俺不需要输出 html 页面,只是:
>> - 可以获取 GET/POST 来的数据
>> - 以 JSON 格式返回结果
>> - 可以向其它网站发出 GET 的查询请求,并收集到返回数据
>> - 可以保存数据到远端的 MongoDB
>>
>> 分别都有简单的实例代码进行学习嘛?
>
>
> 我都直接用wai/warp开发这类服务,写了一个很简单的例子,定时从远程服务更新数据放在内存里,接受http请求返回缓存的数据,刚启动时更新得不及时的话,http请求会阻塞到缓存填满,没有加入写mongodb的部分。
> Simple.hs 是直接缓存字符串,JsonService.hs 是缓存结构化数据。
>
> https://github.com/yihuang/haskell-web-tutorials/tree/master/active-cache-wai
>

UP++++++++
- 直接上代码是最好的指导!
謝謝!

yi huang

unread,
Apr 26, 2012, 10:47:02 PM4/26/12
to Zoom.Quiet, hask...@googlegroups.com, haske...@googlegroups.com
2012/4/27 Zoom.Quiet <zoom....@gmail.com>

在 2012年4月27日 上午10:07,yi huang <yi.cod...@gmail.com> 写道:
> 2012/4/26 Zoom.Quiet <zoom....@gmail.com>
>
>> 俺不需要输出 html 页面,只是:
>> - 可以获取 GET/POST 来的数据
>> - 以 JSON 格式返回结果
>> - 可以向其它网站发出 GET 的查询请求,并收集到返回数据
>> - 可以保存数据到远端的 MongoDB
>>
>> 分别都有简单的实例代码进行学习嘛?
>
>
> 我都直接用wai/warp开发这类服务,写了一个很简单的例子,定时从远程服务更新数据放在内存里,接受http请求返回缓存的数据,刚启动时更新得不及时的话,http请求会阻塞到缓存填满,没有加入写mongodb的部分。
> Simple.hs 是直接缓存字符串,JsonService.hs 是缓存结构化数据。
>
> https://github.com/yihuang/haskell-web-tutorials/tree/master/active-cache-wai
>

UP++++++++
- 直接上代码是最好的指导!
謝謝!

刚才用MVar的版本还是存在并发的问题,因为readMVar 和forcePutMVar 都不是原子的,改成stm了。看来得养成默认就选stm的习惯。 
 

>>
>>
>> --
>> 人生苦短, Pythonic! 冗余不做,日子甭过!备份不做,十恶不赦!
>> 俺: http://about.me/zoom.quiet
>> 文字协议: http://creativecommons.org/licenses/by-sa/2.5/cn/
>>
>> --
>> 您收到此邮件是因为您订阅了 Google 网上论坛的“HaskellCUG”论坛。
>> 要向此网上论坛发帖,请发送电子邮件至 haske...@googlegroups.com
>> 要取消订阅此网上论坛,请发送电子邮件至 haskellcug+...@googlegroups.com
>> 若有更多问题,请通过 http://groups.google.com/group/haskellcug?hl=zh-CN 访问此网上论坛。
>>
>
>
>
> --
> http://yi-programmer.com/



--
人生苦短, Pythonic! 冗余不做,日子甭过!备份不做,十恶不赦!
俺: http://about.me/zoom.quiet
文字协议: http://creativecommons.org/licenses/by-sa/2.5/cn/

Zoom.Quiet

unread,
Apr 26, 2012, 11:02:44 PM4/26/12
to yi huang, hask...@googlegroups.com, haske...@googlegroups.com
在 2012年4月27日 上午10:47,yi huang <yi.cod...@gmail.com> 写道:
> 2012/4/27 Zoom.Quiet <zoom....@gmail.com>
>
>> 在 2012年4月27日 上午10:07,yi huang <yi.cod...@gmail.com> 写道:
>> > 2012/4/26 Zoom.Quiet <zoom....@gmail.com>
>> >
>> >> 俺不需要输出 html 页面,只是:
>> >> - 可以获取 GET/POST 来的数据
>> >> - 以 JSON 格式返回结果
>> >> - 可以向其它网站发出 GET 的查询请求,并收集到返回数据
>> >> - 可以保存数据到远端的 MongoDB
>> >>
>> >> 分别都有简单的实例代码进行学习嘛?
>> >
>> >
>> >
>> > 我都直接用wai/warp开发这类服务,写了一个很简单的例子,定时从远程服务更新数据放在内存里,接受http请求返回缓存的数据,刚启动时更新得不及时的话,http请求会阻塞到缓存填满,没有加入写mongodb的部分。
>> > Simple.hs 是直接缓存字符串,JsonService.hs 是缓存结构化数据。
>> >
>> >
>> > https://github.com/yihuang/haskell-web-tutorials/tree/master/active-cache-wai
>> >
>>
>> UP++++++++
>> - 直接上代码是最好的指导!
>> 謝謝!
>
>
> 刚才用MVar的版本还是存在并发的问题,因为readMVar 和forcePutMVar 都不是原子的,改成stm了。看来得养成默认就选stm的习惯。
>

嗯嗯嗯,另外,大家知道哪儿有 支持 Haskell 的 PaaS 平台?
- 租个 VPS 自个儿发布不是不能,而是忒麻烦了,,,

yi huang

unread,
Apr 26, 2012, 11:03:01 PM4/26/12
to Zoom.Quiet, hask...@googlegroups.com, haske...@googlegroups.com
2012/4/27 yi huang <yi.cod...@gmail.com>

2012/4/27 Zoom.Quiet <zoom....@gmail.com>

在 2012年4月27日 上午10:07,yi huang <yi.cod...@gmail.com> 写道:
> 2012/4/26 Zoom.Quiet <zoom....@gmail.com>
>
>> 俺不需要输出 html 页面,只是:
>> - 可以获取 GET/POST 来的数据
>> - 以 JSON 格式返回结果
>> - 可以向其它网站发出 GET 的查询请求,并收集到返回数据
>> - 可以保存数据到远端的 MongoDB
>>
>> 分别都有简单的实例代码进行学习嘛?
>
>
> 我都直接用wai/warp开发这类服务,写了一个很简单的例子,定时从远程服务更新数据放在内存里,接受http请求返回缓存的数据,刚启动时更新得不及时的话,http请求会阻塞到缓存填满,没有加入写mongodb的部分。
> Simple.hs 是直接缓存字符串,JsonService.hs 是缓存结构化数据。
>
> https://github.com/yihuang/haskell-web-tutorials/tree/master/active-cache-wai 

>

UP++++++++
- 直接上代码是最好的指导!
謝謝!

刚才用MVar的版本还是存在并发的问题,因为readMVar 和forcePutMVar 都不是原子的,改成stm了。看来得养成默认就选stm的习惯。 

又做了一个调整,之前更新缓存的线程不管http请求成功失败都会delay再继续更新,现在改成成功才delay,失败就直接重试。
这样就不能用简单的forever实现了,得自己递归。
老实说,这个时候就有点怀念起面向过程的语句了,手动递归等于是手动goto。
 
 

>>
>>
>> --
>> 人生苦短, Pythonic! 冗余不做,日子甭过!备份不做,十恶不赦!
>> 俺: http://about.me/zoom.quiet
>> 文字协议: http://creativecommons.org/licenses/by-sa/2.5/cn/
>>
>> --
>> 您收到此邮件是因为您订阅了 Google 网上论坛的“HaskellCUG”论坛。
>> 要向此网上论坛发帖,请发送电子邮件至 haske...@googlegroups.com
>> 要取消订阅此网上论坛,请发送电子邮件至 haskellcug+...@googlegroups.com
>> 若有更多问题,请通过 http://groups.google.com/group/haskellcug?hl=zh-CN 访问此网上论坛。
>>
>
>
>
> --
> http://yi-programmer.com/



--
人生苦短, Pythonic! 冗余不做,日子甭过!备份不做,十恶不赦!
俺: http://about.me/zoom.quiet
文字协议: http://creativecommons.org/licenses/by-sa/2.5/cn/



--
http://yi-programmer.com/

yi huang

unread,
Apr 26, 2012, 11:06:59 PM4/26/12
to Zoom.Quiet, hask...@googlegroups.com, haske...@googlegroups.com
2012/4/27 Zoom.Quiet <zoom....@gmail.com>
在 2012年4月27日 上午10:47,yi huang <yi.cod...@gmail.com> 写道:
> 2012/4/27 Zoom.Quiet <zoom....@gmail.com>
>
>> 在 2012年4月27日 上午10:07,yi huang <yi.cod...@gmail.com> 写道:
>> > 2012/4/26 Zoom.Quiet <zoom....@gmail.com>
>> >
>> >> 俺不需要输出 html 页面,只是:
>> >> - 可以获取 GET/POST 来的数据
>> >> - 以 JSON 格式返回结果
>> >> - 可以向其它网站发出 GET 的查询请求,并收集到返回数据
>> >> - 可以保存数据到远端的 MongoDB
>> >>
>> >> 分别都有简单的实例代码进行学习嘛?
>> >
>> >
>> >
>> > 我都直接用wai/warp开发这类服务,写了一个很简单的例子,定时从远程服务更新数据放在内存里,接受http请求返回缓存的数据,刚启动时更新得不及时的话,http请求会阻塞到缓存填满,没有加入写mongodb的部分。
>> > Simple.hs 是直接缓存字符串,JsonService.hs 是缓存结构化数据。
>> >
>> >
>> > https://github.com/yihuang/haskell-web-tutorials/tree/master/active-cache-wai
>> >
>>
>> UP++++++++
>> - 直接上代码是最好的指导!
>> 謝謝!
>
>
> 刚才用MVar的版本还是存在并发的问题,因为readMVar 和forcePutMVar 都不是原子的,改成stm了。看来得养成默认就选stm的习惯。
>

嗯嗯嗯,另外,大家知道哪儿有 支持 Haskell 的 PaaS 平台?
- 租个 VPS 自个儿发布不是不能,而是忒麻烦了,,,

可以部署heroku,前提是要找个64的机器编译可执行文件
 


--
人生苦短, Pythonic! 冗余不做,日子甭过!备份不做,十恶不赦!
俺: http://about.me/zoom.quiet
文字协议: http://creativecommons.org/licenses/by-sa/2.5/cn/

yi huang

unread,
Apr 27, 2012, 9:18:32 PM4/27/12
to Zoom.Quiet, hask...@googlegroups.com, haske...@googlegroups.com
2012/4/27 yi huang <yi.cod...@gmail.com>

2012/4/27 Zoom.Quiet <zoom....@gmail.com>
在 2012年4月27日 上午10:47,yi huang <yi.cod...@gmail.com> 写道:
> 2012/4/27 Zoom.Quiet <zoom....@gmail.com>
>
>> 在 2012年4月27日 上午10:07,yi huang <yi.cod...@gmail.com> 写道:
>> > 2012/4/26 Zoom.Quiet <zoom....@gmail.com>
>> >
>> >> 俺不需要输出 html 页面,只是:
>> >> - 可以获取 GET/POST 来的数据
>> >> - 以 JSON 格式返回结果
>> >> - 可以向其它网站发出 GET 的查询请求,并收集到返回数据
>> >> - 可以保存数据到远端的 MongoDB
>> >>
>> >> 分别都有简单的实例代码进行学习嘛?
>> >
>> >
>> >
>> > 我都直接用wai/warp开发这类服务,写了一个很简单的例子,定时从远程服务更新数据放在内存里,接受http请求返回缓存的数据,刚启动时更新得不及时的话,http请求会阻塞到缓存填满,没有加入写mongodb的部分。
>> > Simple.hs 是直接缓存字符串,JsonService.hs 是缓存结构化数据。
>> >
>> >
>> > https://github.com/yihuang/haskell-web-tutorials/tree/master/active-cache-wai
>> >
>>
>> UP++++++++
>> - 直接上代码是最好的指导!
>> 謝謝!
>
>
> 刚才用MVar的版本还是存在并发的问题,因为readMVar 和forcePutMVar 都不是原子的,改成stm了。看来得养成默认就选stm的习惯。
>

嗯嗯嗯,另外,大家知道哪儿有 支持 Haskell 的 PaaS 平台?
- 租个 VPS 自个儿发布不是不能,而是忒麻烦了,,,

可以部署heroku,前提是要找个64的机器编译可执行文件
 


这个修改后的风格是不是比之前过程式的风格更好?

 


--
人生苦短, Pythonic! 冗余不做,日子甭过!备份不做,十恶不赦!
俺: http://about.me/zoom.quiet
文字协议: http://creativecommons.org/licenses/by-sa/2.5/cn/



--
http://yi-programmer.com/

Zoom.Quiet

unread,
Apr 27, 2012, 9:25:23 PM4/27/12
to hask...@googlegroups.com, haske...@googlegroups.com

- 哈! Python 样的,可读性的确好多
- 建议吼,既然是作为教程的实例
- 在关键的地方注释一下吧,,,

Reply all
Reply to author
Forward
0 new messages