Sto provando a creare un API di ricerca RESTful (richiesta POST) che può restituire diversi tipi di risorse (ad esempio A, B, C, ecc.). Ho definito un modello di dati per ciascun tipo di risorsa. Ci sono alcune proprietà comuni a tutti i tipi e ce ne sono alcune specifiche per alcuni tipi.
"A" : {
"a_property1",
"a_property2",
"property1",
"common_property"
}
"B": {
"b_property1",
"b_property2",
"property1",
"common_property"
}
"C": {
"c_property1",
"common_property"
}
richiesta di esempio
{
q : "dog",
filters: {
"common_property" : 123, //put the common filters outside
"A" : {
//put all type A specific filters inside
"A.a_property1" : 100,
"A.a_property2": "value",
},
"B" : {
//put all type B specific filters here
"B.b_property1": "value"
}
}
}
Sto cercando di legare l'oggetto richiesta allo stesso modello di dati (si sentirebbe simmetrico in quel modo).
Domande:
- come rappresentare i filtri per le proprietà che fanno parte di più di un tipo ma non di tutti i tipi. ad esempio "property1"?
- è una buona idea legare la richiesta al modello di dati delle risorse?
EDIT:
Prendiamo Google come esempio
/search
{
"q" : "paris"
"verticals" : ["web","images","maps","news"] // or ["all"]
"filter" : {
"common.last_modified": "2017-01-01"
}
"sort" : "relevance"
}
/search
{
"q" : "paris"
"verticals" : ["images"]
"filter": {
"image.type" : "Line Drawing",
"image.color" : "Red"
}
"sort" : "relevance"
}
Uno dei motivi per cui mi piace il prefisso è che qualifica dove il filtro appartiene. In questo caso questi filtri non hanno alcun senso per la ricerca sul Web, quindi possiamo generare un errore.
/search
{
"q" : "paris"
"verticals" : ["web"] // or ["all"]
"filter": {
"image.type" : "Line Drawing",
"image.color" : "Red",
"web.category": "travel"
}
"sort" : "relevance"
}
NOTA: Ho modificato leggermente la richiesta per rimuovere le sezioni come A, B, C nella richiesta poiché sembrava complicata.