如何用各种领域的搜索方法设计资源?

时间:2014-03-17 19:09:09

标签: api rest search get api-design

我正在为类字典服务设计REST API。我们的目标是支持多种语言,但我将以中文为例(iso代码:cmn)。

我认为我的词典是资源,所以我得到了:

对于我希望在以下字段中允许模糊搜索的每种语言:

  • ort:主要拼写法(例如简体中文);
  • ortx1:第一个额外拼写法(例如繁体中文);
  • pho:拼音(例如 Hanyu拼音);
  • def:法语翻译。

当前状态

目前我的API是这样的:

/api/
    ├── dicts/
    │   ├── cmn/
    │   │   ├── any/{text}
    │   │   ├── ort/{text}   # Simplified
    │   │   ├── ortx1/{text} # Traditional
    │   │   ├── pho/{text}   # Pinyin
    │   │   ├── def/{text}
    │   ├── jpn/
    │   │   ├── any/{text}
    │   │   ├── ort/{text}   # Kanji
    │   │   ├── ortx1/{text} # Hirgana/Katakana
    │   │   ├── pho/{text}   # romaji
    └───└───└── def/{text}   

我应该保留当前的api布局还是切换到另一个?

  1. …/cmn/{field}/{text}当前;
  2. …/cmn/{text}/{field};
  3. …/cmn/{text}?{field}使用查询字符串参数来调整我的搜索。
  4. …/search/{lang}/{field}/{text}将搜索视为资源;

1 个答案:

答案 0 :(得分:1)

在我看来,字段参数(ort,ortx1等)实际上并不符合独立资源的要求。此外,如果您看到,这些字段很常见,并在每个cmn子树下重复。

更直观的方法似乎是第3个,因为该字段仅仅是搜索中的限制。这也允许更容易的方式来允许默认搜索模式,如果您使用字段作为资源,这将是违反直觉和模糊的。

第二种方法也面临允许默认搜索模式的问题,字段显然不是文本的子资源。

如果您将{field}作为资源删除并将其添加为查询参数,那么您提到的第4种方法看起来是合理的。