1

热门开源Web开发框架推荐

 2 years ago
source link: https://blog.gitee.com/2022/04/01/webframeworkwithgitee/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

热门开源Web开发框架推荐-Gitee 官方博客

程序员圈有这么一句话:“不要重复造轮子” ,这句话也带来许多争议。

要不要重复造轮子?

有的人认为这是一种“拿来主义”的傲慢体现,因为你不造自己的轮子,就会缺乏核心技术,由此将一直受限,创新力也大幅度下降,发展空间将会一直被“卡脖子”,从而陷入落后于率先造轮者的步伐;而也有一部分人认为这是一种卓越的工作方式,他们认为并非每个人都能原创出核心的技术,也并非每个程序员都能成为项目的架构师或技术大牛,不重复造轮,而是拿到一个框架,在上面进行二次开发然后拿来去用,学习过程中也提高了效率,这不是什么不屑一顾的事。

本周的主题并非是不鼓励自主创新,而是推崇自主创新,毕竟只有自主创新才能创造出属于自己的技术,才能提前避免一些风险,对抗现实世界的变化带来的动荡与不安,提高抗风险能力。“不要重复造轮子”并不是适用核心技术和空白领域,这方面还是鼓励与支持“造轮”一说。

只是时至今日,国内的软件行业已然不同于过往的空白期,为了在更快的时间内进步,我们需要快速学习造轮子的套路。换句话说, “站在巨人的肩膀上会让你事半功倍” 。如果你遇到问题,可以尝试这样一个角度:不要只想着自己从头搞定,先去看看有没有前人经验,看看是否有什么人在什么地方遇到过类似的问题,找到这个人,和对方建立联系获取相关信息,能够帮助你节约非常多的时间来做更重要的事情。

这其中学习新技术、新框架是十分重要一方面,另一方面就是不能只是简单地学习这些技术、框架是怎么用的,要知其然,还要知其所以然。如果想要开发一套稳定的,容易维护的系统,在使用“轮子”的时候,就需要对轮子有足够的了解。知道这个“轮子”适用于什么样的场景,有什么样的特点、优点,会有什么样缺点。这样才能做到扬长避短,更好地使用轮子。因此今天,我们以此为契机,给大家分享一些优秀的开源 Web 开发框架,在先行者的经验上,一同学习、进步。如果你对“不必重复造轮子”或者下列“ Web 开发框架”项目有更深入的见解,欢迎大家在评论中一同讨论 😁


JFinal

开源许可证: Apache-2.0

项目作者: JFinal

项目地址: https://gitee.com/jfinal/jfinal

推荐原因: JFinal 是一款基于 Java 语言的极速 WEB + ORM 框架,拥有 Java 语言优势的同时,拥有 Ruby、Python 等动态语言的开发效率。

主要编程语言: Java

项目示例:

1.控制器(支持 Enjoy、JSP、Velocity、JSON 等等以及自定义视图渲染)

@Before(BlogInterceptor.class)
public class BlogController extends Controller {

    @Inject
    BlogService service;

    public void index() {
        set("blogPage", service.paginate(getParaToInt(0, 1), 10));
        render("blog.html");
    }

    public void add() {
    }

    @Before(BlogValidator.class)
    public void save() {
        getModel(Blog.class).save();
        redirect("/blog");
    }

    public void edit() {
        set("blog", service.findById(getParaToInt()));
    }

    @Before(BlogValidator.class)
    public void update() {
        getModel(Blog.class).update();
        redirect("/blog");
    }

    public void delete() {
        service.deleteById(getParaToInt());
        redirect("/blog");
    }
}

2.Service所有业务与sql全部放在Service层。

public class BlogService {

    private Blog dao = new Blog().dao();
    
    public Page<Blog> paginate(int pageNumber, int pageSize) {
        return dao.paginate(pageNumber, pageSize, "select *", "from blog order by id asc");
    }
    
    public Blog findById(int id) {
        return dao.findById(id);
    }
    
    public void deleteById(int id) {
        dao.deleteById(id);
    }
}

3.Model(无xml、无annotaion、无attribute)

public class Blog extends Model<Blog> {
    
}

4.Validator(API引导式校验,比xml校验方便N倍,有代码检查不易出错)

public class BlogValidator extends Validator {
    protected void validate(Controller controller) {
        validateRequiredString("blog.title", "titleMsg", "请输入Blog标题!");
        validateRequiredString("blog.content", "contentMsg", "请输入Blog内容!");
    }

    protected void handleError(Controller controller) {
        controller.keepModel(Blog.class);
    }
}

5.拦截器(在此demo中仅为示例,本demo不需要此拦截器)

public class BlogInterceptor implements Interceptor {
    public void intercept(Invocation inv) {
        System.out.println("Before invoking " + inv.getActionKey());
        inv.invoke();
        System.out.println("After invoking " + inv.getActionKey());
    }
}


ymate-platform-v2

开源许可证: Apache-2.0

项目作者: 有理想的鱼

项目地址: https://gitee.com/suninformation/ymate-platform-v2

推荐原因: ymate-platform-v2 是一个简单、易用的轻量级 Java 应用开发框架

主要编程语言: Java

项目模块功能:

热门开源Web开发框架推荐-Gitee 官方博客

HServer

开源许可证: Apache-2.0

项目作者: HServer

项目地址: https://gitee.com/HServer/HServer

推荐原因: HServer 是一个开发灵活,轻量级,低入侵,高并发的新型 Web 开发框架。

主要编程语言: Java

项目原理及流程:

热门开源Web开发框架推荐-Gitee 官方博客


drogon

开源许可证: MIT

项目作者: an-tao

项目地址: https://gitee.com/an-tao/drogon

推荐原因: 基于 C++14/17 的跨平台、高性能 HTTP Web 应用框架

主要编程语言: C++

操作案例:

1.创建一个HttpSimpleController对象。

/// The TestCtrl.h file
#pragma once
#include <drogon/HttpSimpleController.h>
using namespace drogon;
class TestCtrl:public drogon::HttpSimpleController<TestCtrl>
{
public:
    virtual void asyncHandleHttpRequest(const HttpRequestPtr& req, std::function<void (const HttpResponsePtr &)> &&callback) override;
    PATH_LIST_BEGIN
    PATH_ADD("/test",Get);
    PATH_LIST_END
};

/// The TestCtrl.cc file
#include "TestCtrl.h"
void TestCtrl::asyncHandleHttpRequest(const HttpRequestPtr& req,
                                      std::function<void (const HttpResponsePtr &)> &&callback)
{
    //write your application logic here
    auto resp = HttpResponse::newHttpResponse();
    resp->setBody("<p>Hello, world!</p>");
    resp->setExpiredTime(0);
    callback(resp);
}

2.代码都可以由 drogon_ctl命令创建后这样创建控制器:

/// The header file
#pragma once
#include <drogon/HttpSimpleController.h>
using namespace drogon;
class JsonCtrl : public drogon::HttpSimpleController<JsonCtrl>
{
  public:
    virtual void asyncHandleHttpRequest(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback) override;
    PATH_LIST_BEGIN
    //list path definitions here;
    PATH_ADD("/json", Get);
    PATH_LIST_END
};

/// The source file
#include "JsonCtrl.h"
void JsonCtrl::asyncHandleHttpRequest(const HttpRequestPtr &req,
                                      std::function<void(const HttpResponsePtr &)> &&callback)
{
    Json::Value ret;
    ret["message"] = "Hello, World!";
    auto resp = HttpResponse::newHttpJsonResponse(ret);
    callback(resp);
}

3.通过 HttpController 类创建一个 RESTful API:

/// The header file
#pragma once
#include <drogon/HttpController.h>
using namespace drogon;
namespace api
{
namespace v1
{
class User : public drogon::HttpController<User>
{
  public:
    METHOD_LIST_BEGIN
    //use METHOD_ADD to add your custom processing function here;
    METHOD_ADD(User::getInfo, "/{id}", Get);                  //path is /api/v1/User/{arg1}
    METHOD_ADD(User::getDetailInfo, "/{id}/detailinfo", Get);  //path is /api/v1/User/{arg1}/detailinfo
    METHOD_ADD(User::newUser, "/{name}", Post);                 //path is /api/v1/User/{arg1}
    METHOD_LIST_END
    //your declaration of processing function maybe like this:
    void getInfo(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback, int userId) const;
    void getDetailInfo(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback, int userId) const;
    void newUser(const HttpRequestPtr &req, std::function<void(const HttpResponsePtr &)> &&callback, std::string &&userName);
  public:
    User()
    {
        LOG_DEBUG << "User constructor!";
    }
};
} // namespace v1
} // namespace api


cppweb

项目作者: 寻根

项目地址: https://gitee.com/xungen/cppweb

推荐原因: cppweb 是基于 C++ 开发的 Web 服务器,支持 C/C++、Python、Java 等多语言混合开发 Web 应用。

主要编程语言: C++

项目功能展示:

热门开源Web开发框架推荐-Gitee 官方博客


Hyperf

开源许可证: MIT

项目作者: hyperf

项目地址: https://gitee.com/hyperf/hyperf

推荐原因: Hyperf 是一款基于 Swoole 4.5+ 实现的高性能、高灵活性的 PHP 持久化框架,特别适用于微服务和中间件的开发。

主要编程语言: PHP

实操教程: 请参考 https://course.swoole-cloud.com/videos/5/new?from=hyperf.io 查看详细教程进行操作。


ThinkPHP

开源许可证: Apache-2.0

项目作者: ThinkPHP

项目地址: https://gitee.com/top-think/think

推荐原因: ThinkPHP 是一家拥有 15 年历史的老牌 PHP 开源框架

主要编程语言: PHP

项目操作方法演示:

这是一个典型的 Index 控制器的操作方法定义,包含了两个操作方法:若不使用任何参数,如果定义了一个非可选参数,并且不是对象类型,则该参数必须通过用户请求传入,如果是 URL 请求,则通常是通过当前的请求传入,操作方法的参数支持依赖注入。

<?php
namespace app\controller;

class Index 
{
    public function index()
    {
        return 'index';
    }
    
    public function hello(string $name)
    {
        return 'Hello,'.$name;
    }
}


TimoPHP

开源许可证: BSD-3-Clause

项目作者: tomener

项目地址: https://gitee.com/tomener/TimoPHP

推荐原因: TimoPHP 是一个快速、灵活的 PHP Web 开发框架。

主要编程语言: PHP

目录结构:

/data
  |-TimoSNS                         项目目录(自己项目名称,比如用TimoPHP开发的社区应用,叫TimoSNS,自定义)
  |   |-app                         应用目录
  |   |   |-cli                     命令行
  |   |   |-api                     移动端
  |   |   |   |-controller          控制器目录
  |   |   |   |_config.php          项目配置文件
  |   |-business                    公共业务逻辑
  |   |-cache                       运行时缓存目录
  |   |-middleware                  中间件
  |   |-provider                    服务提供者目录
  |   |-component                   组件目录
  |   |-config                      公共配置目录
  |   |   |-dev                     开发环境配置目录
  |   |   |-pro                     线上环境配置目录
  |   |   |-test                    测试环境配置目录
  |   |-lib                         自定义类库
  |   |-logs                        日志目录
  |   |-model                       模型目录
  |   |-public                      WEB目录(对外访问目录)名称自定义,如wwwroot、public
  |   |   |-api                     小程序
  |   |   |   |_index.php           小程序入口文件
  |   |-send                        推送(微信、小程序、android、IOS)
  |   |-service                     公共服务目录
  |   |-task                        异步任务
  |   |-vendor                      composer安装类库目录
  |   |-bootstrap.php               整个项目的启动文件
  |   |_composer.json
  |-TimoPHP                         框架,和项目在同一级目录

JavaScript


titbit

开源许可证: MulanPSL-2.0

项目作者: 疯狂的机械键盘

项目地址: https://gitee.com/daoio/titbit

推荐原因: titbit 是一款 Node.js 环境的Web后端框架,支持HTTP/HTTPS/HTTP2,也支持配置切换。

主要编程语言: JavaScript

流程展示:

热门开源Web开发框架推荐-Gitee 官方博客


GinSkeleton

开源许可证: MIT

项目作者: 张奇峰

项目地址: https://gitee.com/daitougege/GinSkeleton

推荐原因: 这是一个基于 Go 语言 Gin 框架封装的 Web 项目骨架。

主要编程语言: Go

项目流程展示:

1.主线逻辑图:

热门开源Web开发框架推荐-Gitee 官方博客

2.核心主线调用链图

热门开源Web开发框架推荐-Gitee 官方博客

3.后台骨架图

热门开源Web开发框架推荐-Gitee 官方博客


go-zero

开源许可证: MIT

项目作者: kevwan

项目地址: https://gitee.com/kevwan/go-zero

推荐原因: go-zero 是一个集成了各种工程实践的 Web 和 RPC 框架。

主要编程语言: Go

项目架构展示:

热门开源Web开发框架推荐-Gitee 官方博客


orange

开源许可证: Apache-2.0

项目作者: qiqi

项目地址: https://gitee.com/zhucheer/orange

推荐原因: orange 是一款基于 Golang 语言的 web 开发框架

编程语言: Go

项目原理演示:

热门开源Web开发框架推荐-Gitee 官方博客

Delphi


DelphiWebMVC

开源许可证: Apache-2.0

项目作者: PRSoft

项目地址: https://gitee.com/pearroom/DelphiWebMVC

推荐原因: 据项目作者表示,Delphi 在 Web 系统开发上没有像 Java 或 PHP 这样方便,对于一直使用 Delphi 的工程师来说是个遗憾,因此使用 Delphi 技术开发了一套 Web 框架,使用 MVC 模式,让工程师只需把精力放在模型与视图的设计上。

主要编程语言: Delphi

项目Demo演示:

注:此项目详细操作请参考作者博客:https://my.oschina.net/delphimvc

热门开源Web开发框架推荐-Gitee 官方博客


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK