Skip to content

our-bts/kango

Folders and files

NameName
Last commit message
Last commit date

Latest commit

e4fee55 · Sep 16, 2014

History

10 Commits
Sep 16, 2014
Sep 16, 2014
Sep 16, 2014
Sep 16, 2014
Sep 16, 2014
Sep 16, 2014
Sep 16, 2014
Sep 16, 2014
Sep 16, 2014
Sep 16, 2014
Sep 16, 2014
Sep 16, 2014
Sep 16, 2014

Repository files navigation

kango

REST API for mongo

API Pattern

Kango提供了几种API访问方式

  • GET
    • /kango/:db/:col -- 复杂查询,通过query string传递查询条件
    • /kango/:db/:col/:id -- 通过primary key查询
  • PUT
    • /kango/:db/:col -- 新增或修改数据。如果primary key已存在则修改,否则新增。
  • POST
    • /kango/:db/:col/batch-insert -- 批量插入数据。如果primary key已存在则插入失败。
  • DELETE
    • /kango/:db/:col/:id -- 通过primary key删除数据。

Admin API

Kango提供一些管理的API

  • GET
    • /kango/db -- 列出当前Mongo所有的database
    • /kango/:db/collection -- 列出指定database下的所有collection
    • /kango/:db/status -- 查询指定database的状态
    • /kango/:db/:col/status -- 查询指定database和collection的状态
    • /kango/:db/:col/index -- 查询指定database和collection的index信息
    • /kango/replset-status -- 查询当前mongo实例的replication set信息
    • /kango/server-status -- 查询当前server状态
  • PUT
    • /kango/dbInfo -- 注册新的Database
    • /kango/schema -- 注册新的Collection以及Collection的index、primary key

如何使用

注册database

PUT http://localhost:8401/kango/dbInfo

{
    "DB": "sample",
    "IsRemove": false,
    "Status": "Active"
}

注册collection

{
    "DB": "sample",
    "Schema": "employee",
    "IsRemove": false,
    "Fields": [
        {
            "FieldName": "id",
            "IsIndex": true,
            "IsPrimaryKey": true
        },
        {
            "FieldName": "EmployeeNumber",
            "IsIndex": true,
            "IsPrimaryKey": false
        }
    ]
}

那么该collection可以使用如下地址进行数据访问和操作:

插入一条数据

PUT http://localhost:8401/kango/sample/employee

使用如下request data:

{
"Id": 110000,
"EmployeeNumber": 9527,
"Note": "This is demo employee",
"FirstName": "Beautiful",
"LastName": "Day",
"Email": "[email protected]",
"Birthday": "1990-03-15T00:00:00",
"IsActive": true
}

查询单笔记录

GET http://localhost:8401/kango/sample/employee/110000

修改单笔记录

PUT http://localhost:8401/kango/sample/employee

修改和新增是相同的接口,Kango会根据数据的Primary Key去判断,如果存在就是更新,否则就是插入。

我们还是修改刚才插入的数据,为了便于区分,我们加入一个字段__Description__,使用如下request

{
"Id": 110000,
"EmployeeNumber": 9527,
"Note": "This is demo employee",
"Description": "This is added when update",
"FirstName": "Beautiful",
"LastName": "Day",
"Email": "[email protected]",
"Birthday": "1990-03-15T00:00:00",
"IsActive": true
}

我们仍然可以使用单笔查询进行验证操作是否成功。

复杂查询

系统支持有限的一些复杂查询,所有的查询都是通过queryString的方式进行传递。

复杂查询,系统默认都会返回分页的结果,默认的pageSize是10。

GET http://localhost:8401/kango/sample/employee

从结果可以看到,默认的PageIndex是第一页,PageSize是10,Total_Rows是所有符合查询条件的记录数,Rows是查询结果。

pageIndex和pageSize都是可以加入到查询条件上的。

其他关于分页的查询还支持:

  • sortField:排序字段
  • sort:desc or asc,默认是asc
  • fields:数组,查询结果只返回的属性列表。

所有对字段的查询条件都需要满足格式:f_{fieldName}={value}

如果value是一个string,那么默认表示对该field进行一个equal操作,如?f_EmployeeNumer=9527

如果value是一个JSON的object,那么格式为:{"$operator": "parameter"}

第一个属性的属性名为操作符的名称,属性值为带入操作的参数值

  • 使用In操作符:f_EmployeeNumber={"$in":[9527, 9528]}
  • 使用NotIn操作符:f_EmployeeNumber={"$nin":[9527, 9528]}
  • 使用Greater操作符:f_EmployeeNumber={"$gt":9527}
  • 使用GreaterEqual操作符:f_EmployeeNumber={"$gte":9527}
  • 使用Less操作符:f_EmployeeNumber={"$lt":9527}
  • 使用LessEqual操作符:f_EmployeeNumber={"$lte":9527}
  • 使用GreaterAndLess操作符:f_EmployeeNumber={"$gt":9527, "$lt": 9528}
  • 使用Between操作符:f_EmployeeNumber={"$gte":9527, "$lte": 9528}

下面我们做一个查询的示例,我们将会查询Id为80000到89999,生日大于2005年1月1日的所有员工信息,并按照EmployeeNumber进行倒序排序。

GET http://localhost:8401/kango/sample/employee?f_id={"$gte":80000,"$lte":89999}&f_Birthday={"$gt":"2005-01-01"}&sortField=EmployeeNumber&sort=desc

批量插入

POST http://localhost:8401/kango/sample/employee/batch-insert

为了方便大量数据插入,我们提供了批量插入数据的接口,和PUT操作不同,考虑到性能问题,系统不会对数据的Primary Key进行检查,所以请确保插入的数据的Primary Key不重复,否则有可能导致插入失败或者是部分失败。

和PUT稍有不同的是,Request Body是一个数组,而不是单个数据实体,这里就不做demo了。