Django-Oasis

Django-Oasis (后面简称 Oasis) 旨在更加高效地编写 HTTP API。

使用前提

  • [必要] 该项目基于 Django 框架,所有在使用前需要对 Django 有基本的开发能力。

  • [可选] 项目还使用了 OpenAPI 规范 (OAS) 来描述接口。它可以创建交互式接口文档,实现测试用例自动化,还能用于生成客户端代码等等。但不了解 OAS 也并不影响使用。

简单的示例

这里定义了一个 Book 模型:

models.py [示例1]
from django.db import models


class Book(models.Model):
    title = models.CharField("书名", max_length=20)
    created_at = models.DateTimeField("创建时间", auto_now_add=True)

并使用 Oasis 编写两个接口,为其实现 “查” 和 “增” 的功能:

views.py [示例1]
from django_oasis.common import model2schema
from django_oasis.core import Operation, Resource
from django_oasis.pagination import PagePagination
from django_oasis.parameter import JsonData

from .models import Book


# Oasis 并不能直接理解 Django Model 中的定义,
# 所以需要使用 `model2schema` 将 Book 模型转换成 Schema。
class BookSchema(model2schema(Book)):
    pass


@Resource("/books")
class BookListAPI:
    # get 方法负责处理 GET 请求,用于查询 Book
    def get(self, pagination=PagePagination(BookSchema)):
        # 这里使用了 Oasis 提供的分页功能
        return pagination.paginate(Book.objects.all())

    # post 方法负责处理 POST 请求,用于新增 Book
    @Operation(response_schema=BookSchema)
    def post(self, data=JsonData(BookSchema)):
        return Book.objects.create(**data)

这些请求接口会被 Oasis 处理并转换为 Django 的视图函数和路由,这使其能够成为 Django 项目的一部分。并且还为接口生成了 OAS,将 OAS 导入文档生成工具 (如 SwaggerUI),便可对外展示接口文档了。

这是由上面示例生成的 Swagger 文档:

SwaggerUI [示例1]

功能说明

  • Oasis 使用自有的规则来编写接口代码,而不是使用 Django 的视图函数。

  • Oasis 并不是生成文档,而是生成 OAS,OAS 可以用来做 API 文档和自动化测试使用。而且在整个开发过程中,几乎不需要手写 OAS。

  • Oasis 内置了一个简单配置的 swagger-ui,仅需几行代码即可查看接口文档。而且 Oasis 是以 HTTP 接口的形式暴露 OAS 数据,所以也可以选择喜欢的 API 可视化工具,或者自动化测试工具。

  • Schema 是 Oasis 实现的核心,它负责定义数据结构,验证数据,并提供序列化及反序列化功能。

目录

示例