在其他语言社区里有没有像 Python Django 的 DRF 这样的声明式 REST 框架?
在 Python 的 web 框架 Django 中有个 django-rest-framework,写几个简单的类就可以搭出一套将数据库表直接映射成的 REST 接口,并处理好了 http 动作和状态,包含 search 和 filter,还有权限断路器等东西。
由于我不熟悉其他语言,想问下其他语言里有没有这样好用的工具,或者类似的好用不啰嗦的声明式框架,以便需要用到的时候能快速的上手其他语言。
我觉得 java 和 golang 中应该是有的。
在其他语言社区里有没有像 Python Django 的 DRF 这样的声明式 REST 框架?
最早搞这套模式的应该是 rails 吧,然后被其他框架学走了,这个模式比比皆是,rails 是鼻祖,php 里面我用过 yii 也是这样,但说实话这中模式并不是很好用,表面上节约了不少工作量,实际中使用的时候要做很多 hack 到项目中。
在Java生态里,Spring Data REST跟DRF的声明式风格有点像。你定义个JPA实体,它就能自动给你生成一套完整的REST API,连分页、排序都自带,确实省事。
不过要说最像DRF的,我觉得是TypeScript的NestJS。它用装饰器来声明路由和参数,跟DRF的序列化器、视图集概念很接近。比如你写个@Get('users')就是GET接口,用@Body()接收POST数据,这种声明方式跟DRF一脉相承。
Go语言的Gin框架虽然快,但更偏向中间件模式,得手动写路由处理。Ruby on Rails的ActiveModel Serializers倒是在序列化方面跟DRF的Serializer很像,都是声明式定义输出格式。
总结建议:找类DRF框架可优先看NestJS和Spring Data REST。
走 restful 路线 drf 当然很好用了。
然而 restful 都不好用的场景,drf 用起来就很别扭。
恰好和后端对接过这个库生成的接口,GET POST DELETE PATCH CREATE 这几个比较常用,感觉可扩展性不强,必须按照规范来。
drf 需要显试配置的地方还是不少,CRUD 之外的操作,需要更多的带入到框架的逻辑内,业务复杂的时候反而显得麻烦。不过他帮我们把一些基础建设都做好了,在 Django 体系里暂时没有做的比他更好的。
不过主要 Django 本身的体系和结构也比较简单,而且是大包大揽的方式,所以 drf 的处理无可厚非。在一些更有分层和结构要求的框架和语言下,类似的框架会更有通用性,解决的问题更专一,当然使用起来也更复杂。
nodejs 里 nestjs 框架有一个 nestCRUD https://github.com/nestjsx/crud 我觉得是比较接近 drf 的,不过他是用了 nestjs 的分层架构,所以和 django 还是有很多不同。但是鉴于 django 和 drf 比他们成熟的多,而且他们俩本身是一揽子方案,没有外部依赖,所以一开始用 nestjs + nestCRUD 会不太适应。
Spring data rest 应该差不多,建个 model 继承一下 jpa 接口就可以了
感觉这种只适合单纯的资源类模型,业务逻辑复杂一点的就不够方便了


