我正在为类字典服务设计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布局还是切换到另一个?
…/cmn/{field}/{text}
当前; …/cmn/{text}/{field}
; …/cmn/{text}?{field}
使用查询字符串参数来调整我的搜索。…/search/{lang}/{field}/{text}
将搜索视为资源; 答案 0 :(得分:1)
在我看来,字段参数(ort,ortx1等)实际上并不符合独立资源的要求。此外,如果您看到,这些字段很常见,并在每个cmn子树下重复。
更直观的方法似乎是第3个,因为该字段仅仅是搜索中的限制。这也允许更容易的方式来允许默认搜索模式,如果您使用字段作为资源,这将是违反直觉和模糊的。
第二种方法也面临允许默认搜索模式的问题,字段显然不是文本的子资源。
如果您将{field}
作为资源删除并将其添加为查询参数,那么您提到的第4种方法看起来是合理的。