热门开源Web开发框架推荐
程序员圈有这么一句话:“不要重复造轮子” ,这句话也带来许多争议。
要不要重复造轮子?
有的人认为这是一种“拿来主义”的傲慢体现,因为你不造自己的轮子,就会缺乏核心技术,由此将一直受限,创新力也大幅度下降,发展空间将会一直被“卡脖子”,从而陷入落后于率先造轮者的步伐;而也有一部分人认为这是一种卓越的工作方式,他们认为并非每个人都能原创出核心的技术,也并非每个程序员都能成为项目的架构师或技术大牛,不重复造轮,而是拿到一个框架,在上面进行二次开发然后拿来去用,学习过程中也提高了效率,这不是什么不屑一顾的事。
本周的主题并非是不鼓励自主创新,而是推崇自主创新,毕竟只有自主创新才能创造出属于自己的技术,才能提前避免一些风险,对抗现实世界的变化带来的动荡与不安,提高抗风险能力。“不要重复造轮子”并不是适用核心技术和空白领域,这方面还是鼓励与支持“造轮”一说。
只是时至今日,国内的软件行业已然不同于过往的空白期,为了在更快的时间内进步,我们需要快速学习造轮子的套路。换句话说, “站在巨人的肩膀上会让你事半功倍” 。如果你遇到问题,可以尝试这样一个角度:不要只想着自己从头搞定,先去看看有没有前人经验,看看是否有什么人在什么地方遇到过类似的问题,找到这个人,和对方建立联系获取相关信息,能够帮助你节约非常多的时间来做更重要的事情。
这其中学习新技术、新框架是十分重要一方面,另一方面就是不能只是简单地学习这些技术、框架是怎么用的,要知其然,还要知其所以然。如果想要开发一套稳定的,容易维护的系统,在使用“轮子”的时候,就需要对轮子有足够的了解。知道这个“轮子”适用于什么样的场景,有什么样的特点、优点,会有什么样缺点。这样才能做到扬长避短,更好地使用轮子。因此今天,我们以此为契机,给大家分享一些优秀的开源 Web 开发框架,在先行者的经验上,一同学习、进步。如果你对“不必重复造轮子”或者下列“ Web 开发框架”项目有更深入的见解,欢迎大家在评论中一同讨论 😁
Java
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
项目模块功能:
HServer
开源许可证: Apache-2.0
项目作者: HServer
项目地址: https://gitee.com/HServer/HServer
推荐原因: HServer 是一个开发灵活,轻量级,低入侵,高并发的新型 Web 开发框架。
主要编程语言: Java
项目原理及流程:
C++
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++
项目功能展示:
PHP
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
流程展示:
Go
GinSkeleton
开源许可证: MIT
项目作者: 张奇峰
项目地址: https://gitee.com/daitougege/GinSkeleton
推荐原因: 这是一个基于 Go 语言 Gin 框架封装的 Web 项目骨架。
主要编程语言: Go
项目流程展示:
1.主线逻辑图:
2.核心主线调用链图
3.后台骨架图
go-zero
开源许可证: MIT
项目作者: kevwan
项目地址: https://gitee.com/kevwan/go-zero
推荐原因: go-zero 是一个集成了各种工程实践的 Web 和 RPC 框架。
主要编程语言: Go
项目架构展示:
orange
开源许可证: Apache-2.0
项目作者: qiqi
项目地址: https://gitee.com/zhucheer/orange
推荐原因: orange 是一款基于 Golang 语言的 web 开发框架
编程语言: Go
项目原理演示:
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
本文系作者 @Gitee 原创发布在 Gitee 官方博客。未经许可,禁止转载。