V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hfeeki
V2EX  ›  程序员

因为工作需要,准备开发一个golang的web开发框架,所以请教大家一个问题,一个好的web开发框架需要具备哪些功能、特质、特性?

  •  
  •   hfeeki · 2013-03-24 00:02:18 +08:00 · 12909 次点击
    这是一个创建于 4252 天前的主题,其中的信息可能已经有所发展或是发生改变。
    或者说大家觉得哪个框架的某个特性好用、设计思想好,为什么?一定要非常具体,不要泛泛而谈。不同开发语言都可以,只要把相关的思想、特性介绍清楚就好!!

    例如:
    喜欢rails的约定优于配置的设计思路,可以减少配置文件的数量和代码的复杂性,但是又觉得rails在这点上有些过头了。
    喜欢python的 WSGI 规范,简洁明了,是我见过的最简单的一个web服务器规范。

    喜欢erlang的推导性的语法,很简单优雅,对某些问题很能节省代码量,而且容易编写。如果能够在golang里面也能用到那就好了。

    java的主流开发框架太重型了,不看好。
    第 1 条附言  ·  2013-03-25 13:26:53 +08:00
    我的想法是把实现RESTFUL API的部分独立出来,因为restful api与普通网站开发(指的是需要考虑UI、交互比较多)完全是两种不同的思路,如果硬要混合到一起,会很痛苦的。而且独立出来有一个好处就是可以把网站开发分为两个部分,在API接口定义完之后,两部分就可以并行开发,独立测试,API部分的测试可以使用各种命令行模式的测试工具、方法。而页面部分就要使用UI自动化的工具、方法进行测试。
    另外我倾向与小而美的思路,但是又不能忽略大而全的需求。所以我觉得WSGI/Rack的思路很好,即做到小而美,又能兼顾大而全,接口很简单,什么功能都能通过Middleware来实现,你可以使用系统自带的东西,也可以很容易的进行自定义开发。
    第 2 条附言  ·  2013-03-28 20:11:37 +08:00
    准备先实现一个fake json api server, 有啥好的想法、建议? 我想每个资源对应一个json文件,增加、删除、查询、修改操作都直接对文件进行操作,这样修改也简单,谁有更加简单有效的办法尽管提出来!!
    还有关于怎样实现资源操作代码的自动化生成,有啥建议,想法?
    还有关于模板的支持,想先收集下各位关于模板的最佳实践,怎样才能做到兼顾开发效率、质量,运行效率? 哪些模板最受欢迎?为什么?
    如果有人对这个项目感兴趣的话,请踊跃报名,开源golang web framework,求同道中人踊跃支持!!!
    16 条回复    2017-11-16 14:01:51 +08:00
    daweiba
        1
    daweiba  
       2013-03-24 15:58:40 +08:00
    1 自动路由。要求不需要配置,直接通过url访问,自动按restful映射到位。
    2 各种视图重用,模板语法支持restful
    3 orm,这个不用说了吧
    4 缓存。统一调用各种缓存的api
    5 内置队列。查询数据库时,不需要再调用外部的队列服务。
    6 开发时,修改代码后不需要重新编译或go run,且错误信息直接输出到浏览器。
    7 最重要的是一定要减少import的书写量。


    用golang好像很难满足。。
    cooper
        2
    cooper  
       2013-03-24 16:14:04 +08:00   ❤️ 1
    url route/map,web开发框架的核心,它决定了代码的组织方式
    html 模版子系统
    orm,或者说数据库访问层
    form 前后端验证
    helper 包括:分页,cache,session,sitemap,rss,email等
    deployment 支持,简单说,这个框架起码要内置一个http server
    twm
        3
    twm  
       2013-03-24 16:15:08 +08:00 via iPhone
    大量的第三方库
    summic
        4
    summic  
       2013-03-24 16:53:56 +08:00
    对框架的需求每个项目都不同, 及时基础的mvc、route、orm、form、auth也不是谁都需要的
    我觉得应该先开发给自己用,做最核心的,之后如果能形成一个社区,就好走了

    我有时候想,如果让一个产品经理来设计VIM,会成为什么样子
    felinx
        5
    felinx  
       2013-03-24 17:03:37 +08:00
    给你推荐一个,一位朋友写的
    https://github.com/astaxie/beego
    Rabbit52
        6
    Rabbit52  
       2013-03-24 19:11:20 +08:00
    @summic +1
    liuxurong
        7
    liuxurong  
       2013-03-24 21:33:43 +08:00
    Flask 这种
    onetown
        8
    onetown  
       2013-03-25 00:34:15 +08:00
    我觉得不需要内置ORM, 框架为什么非要带ORM, 我觉得bottle, tornado这种小的框架挺好的。 只要route, template, i18n, 其他交给别人做吧。
    sobigfish
        9
    sobigfish  
       2013-03-25 00:37:03 +08:00
    可扩展性啊,laravel (php) 火起来不是没有原因的。
    0x0001
        10
    0x0001  
       2013-03-25 08:27:29 +08:00
    @daweiba 我一直搞不懂restful是什么东东…
    nickdine
        11
    nickdine  
       2013-03-25 08:53:27 +08:00
    java 有一个playframework 已经很不错了 支持restful 支持热编译 充血模型 约定大于配置 各种牛逼 你可以下源码看看 了解下
    daweiba
        12
    daweiba  
       2013-03-25 08:57:45 +08:00
    @onetown 没有ORM 生产力就不够,永远无法上升为主流框架,主流框架都是full stack的。


    @0x0001 http://ihower.tw/rails3/restful.html
    Xg
        13
    Xg  
       2013-03-25 15:37:08 +08:00
    full stack的可以看看revel,play的Go语言版。应该是目前比较成熟的一个了。
    类似web.go那种的微框架还是自写自用吧,基本上推广不开。。
    我自用的 https://github.com/xgdapg/xgo
    RisingV
        14
    RisingV  
       2013-03-25 16:22:52 +08:00
    框架的主要目的是把那些重复的工作提取出来,提供足够健壮的实现,保证框架使用者将注意力集中在业务逻辑上,同时提供良好的解耦,便于维护和再开发。

    对于web框架而言,我觉得应该做到以下几点
    1)为业务系统提供良好的模块化支持,符合Open/Closed Principle
    2)对http请求可配置的Pipeline过滤器流程机制
    3)url映射,静态资源的统一管理
    4)web框架不应该包含orm,但是可以有拓展机制可以和orm层或者redis等服务衔接
    hfeeki
        15
    hfeeki  
    OP
       2013-03-25 18:00:18 +08:00
    @RisingV 真是巧了,昨天还在思考如何实现Pipelines Filters的机制呢。具体怎么实现还没有想好,请问你有啥思路?
    关于Open/Closed Principle:可否更具体一点,应该注意些什么?哪些是好的工程实践,哪些是差的工程实践?
    to all: 关于把REST API部分(或者叫 Resources Management)与普通的web ui部分分开来,各位有啥意见?
    我的想法就是以后网站开发的标准流程变成:
    1. 定义资源、REST API,使用
    2. 分别开发web ui server 和 api server, 考虑为ui server提供一个fake api server, 准备好一些典型的json数据,这样ui server的开发、测试就可以独立进行了。
    大概的架构:
    https://www.lucidchart.com/documents/view/4e45-01b0-51501ebd-b7d4-690e0a000267
    shen100
        16
    shen100  
       2017-11-16 14:01:51 +08:00
    这里有大家对 Go Web 框架的投票,可以参考下
    https://www.golang123.com/vote/1
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5357 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 07:19 · PVG 15:19 · LAX 23:19 · JFK 02:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.