一款 no-sql 风格的 Rest API 查询框架,目前实现 Django orm 和 peewee。

2017-06-28 16:47:32 +08:00
 dracarysX

RestfulAPI 解析

实现一款 no-sql 风格的参数解析框架rest-query,(like: /?select=id,name,author{id,name,school{*}})&id=gte.20&author.name=wwxiong&order=id.desc)。

目前实现了Django ORMPeewee ORM

Django DEMO

定义模型

class Author(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=50)
    age = models.IntegerField()


class Book(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=50)
    author = models.ForeignKey(Author)

定义试图

from django.views.generic import ListView
from django.views.generic.detail import DetailView
from django_rest_query import RestQueryDetailViewMixin, RestQueryListViewMixin
from .models import Author, Book

class BookDetail(RestQueryDetailViewMixin, DetailView):
    model = Book


class BookList(RestQueryListViewMixin, ListView):
    model = Book


class AuthorDetail(RestQueryDetailViewMixin, DetailView):
    model = Author


class AuthorList(RestQueryListViewMixin, ListView):
    model = Author

这样我们就实现了AuthorBook的查询 API 了。

API

查询姓名为dracarysX的作者,并只返回id, name:

curl http://localhost/authors?select=id,name

查询书籍id大于 100,且作者姓名在['x', 'y', 'z']中,并返回书籍的id, name和作者的id, name,并按照书籍id倒序排序。

curl http://localhost/books?select=id,name,author{id,name}&id=gt.100&author.name=in.x,y,z&order=id.desc

返回数据:

{
    "count": 2,
    "object_list": [
        {
            "id": 2,
            "name": "Javascript",
            "author": {
                "name": "x",
                "id": 2
            }
        },
        {
            "id": 1,
            "name": "Python",
            "author": {
                "name": "y",
                "id": 1
            }
        }
    ],
    "is_paginated": false,
    "page": 1
}

有兴趣的可以直接查看项目中的 DEMO:https://github.com/dracarysX/django-rest-query/tree/master/demo

PS

目前仅仅实现了 Django orm 和 Peewee 的解析。感兴趣的同学可以多多提意见和 issue,谢谢。

2412 次点击
所在节点    Python
3 条回复
AsterOcclu
2017-06-28 17:27:17 +08:00
感觉类似 Graph API ?
mooncakejs
2017-06-28 17:29:01 +08:00
楼主看过 postgrest 这个项目吗
dracarysX
2017-06-28 17:40:00 +08:00
@mooncakejs 嗯,就是看了这个项目才开始做的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/371714

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX