Skip to content

biohub.biobrick

hsfzxjy edited this page Sep 19, 2017 · 21 revisions

API

Data Types

type DetailBrick

{
    part_id: Number, // igem 官方库中的 id,绘制 ruler 时可能有用
    part_name: String,
    ac: {            // Accessibility Compatibility
        10: Boolean,
        12: Boolean,
        21: Boolean,
        23: Boolean,
        25: Boolean,
        1000: Boolean
    },
    ruler: {
        seq_features: Array of {
            type: String,
            first: Number,
            last: Number,
            label: Number,
            reverse: Number // 0 or 1
        },
        sub_parts: Array of {
            id: Number,
            short_name: String,
            nick_name: String,
            icon_url: URL
        },
        part_id: Number // 同 上一个 part_id
    },
    document: {
        text: Markdown,
        digest: String
    },
    weight: Float, // 排序权值
    part_type: String,
    author: String,
    part_status: String,
    sample_status: String,
    uses: Number,
    group_name: String,
    experience_status: String,
    twin_num: String,
    parameters: Array of Array of String,
    short_desc: String,
    description: String,
    status: String,
    creation_date: Date,
    works: String,
    nickname: String,
    categories: String,
    sequence: String,

    // biohub forum 相关字段
    rates: Number, // 投票数
    rate_score: String of Float, // 分数
    stars: Number,
    watches: Number,
}

type ShortBrick

{
    part_type: String,
    part_name: String,
    uses: Number,
    rates: Number,
    rate_score: String of Float,
    stars: Number,
    watches: Number,
    short_desc: String
}

type Brick

由 URL 参数决定为 DetailBrickShortBrick

NOTICE igem 的官方数据库提供了 Biobrick 的大量信息,但仍有部分字段需通过爬虫获取,爬虫触发的时机为访问单个 brick 的详情时。若此前某 brick 未爬虫,部分字段取值会置 null。可能为 null 的字段为 group_name, experience_status, twin_num, parameters, rates, rate_score, stars, watches

RESTful API

GET /api/forum/bricks/

Query Params

  • q 用于查询的 Query Statement。

Query Statement 由 用空格分割的 Query Clause 组成。Query Clause 有以下几种:

  • <keyword>,将 <keyword> 用于 short_desc 的模糊搜索
  • n:<keyword>,将 <keyword> 用于 part_name 的模糊搜索
  • t:<keyword>,将 <keyword> 用于 part_type 的模糊搜索
  • h:,将关键词用 <span class="highlight"></span> 括起来高亮

未来可根据需求加入更多维度的查询。

同种 Query Clause 用 OR 连接,不同种之间用 AND 连接。

例子:bio n:000 t:regu t:dna h: 对应的伪 SQL (只是解释逻辑,后端不使用 SQL)为:

SELECT * FROM biobricks
WHERE (short_desc LIKE '%bio%')
    AND (part_name LIKE '%000%')
    AND (part_type LIKE '%regu%' OR part_type LIKE '%dna%');

并将关键词高亮。

Output

  • 200 -> Page<ShortBrick>

GET /api/forum/bricks/<part_name>/

Output

  • 404
  • 200 -> Page<DetailBrick>

POST /api/forum/bricks/<part_name>/rate/

Input

json。

{
    score: Float, // 0 <= score <= 5
}

Output

  • 400
  • 403
  • 200 -> String = 'OK'

POST /api/forum/bricks/<part_name>/unstar/

POST /api/forum/bricks/<part_name>/star/

POST /api/forum/bricks/<part_name>/watch/

POST /api/forum/bricks/<part_name>/unwatch/

Output

  • 400 -> String = 'Fail' (没有做过前置操作,如 unwatch 前没有 watch
  • 403
  • 200 -> String = 'OK'

GET /api/forum/bricks/<part_name>/users_rated/

GET /api/forum/bricks/<part_name>/users_watching/

GET /api/forum/bricks/<part_name>/users_starred/

Output

  • 200 -> Page<User>

User 友元 API

GET /api/users/(<id>|n:<user_name>|me)/bricks_watching/

GET /api/users/(<id>|n:<user_name>|me)/bricks_rated/

GET /api/users/(<id>|n:<user_name>|me)/bricks_starred/

Query Params

  • detail 若出现此参数,则用 DetailBrick 返回。默认用 ShortBrick 返回。

Output

  • 200 -> Brick

安装

数据库

为了方便更新数据库,igem 的官方数据被独立存在于一个 database igem 中,biohub 通过建立虚拟表与其交互。

安装流程:

$ mysql -u<username> -p -e "CREATE DATABASE IF NOT EXISTS igem;"
$ mysql -u<username> -p igem < biobricks.sql
$ biohub/biobrick/bin/updateparts.py -u <username> -pw <password> # 初次过滤及数据采集
$ biohub/manage.py migrate # 建立虚拟表
$ biohub/manage.py refreshweight # 更新权值
$ biohub/manage.py update_index # 建立 ElasticSearch 的索引
$ biohub/manage.py installjob # 建立/更新刷表的定时任务

ElasticSearch

为了实现各种功能并减小数据库的负担, search 使用 elasticsearch 后端,将大量数据存储为 index 以提供搜索服务。

search 只有在正确安装 elasticsearch 的情况下才可以使用。elasticsearch 要求 <=2.x(3.x不被支持)。推荐按照 elasticsearch 官网方式安装。

安装 elasticsearch 之后,需要在 http://127.0.0.1:9200/ 运行 elasticsearch。这也是 elasticsearch 的默认端口。由于 elasticsearch 运行端口自由度很高,将来可以考虑将程序内 elasticsearch 端口设置作为可自定义的设置项。