Progettazione di una risposta API di ricerca flessibile

3

Riepilogo rapido

Sto creando un micro-servizio di ricerca che consentirà la ricerca tra diversi tipi di risorse in un particolare sistema (ad esempio post di blog, utenti ecc.). L'API che verrà esposta verrà consumata da entrambe le applicazioni Web e dalle applicazioni mobili native.

La mia soluzione

Quello che sto considerando è il ritorno di un array di oggetti generici "SearchResult". Ad esempio:

"results": [
    {
        "title": "My Blog Post",
        "description": "My blog post description",
        "image": "https://img.com/icon.jpg"
        "link": "https://link.com"
        "type": "blog-post"
    },
    {
        "title": "Henry Jacobson",
        "description": "Henry was born in a small village.",
        "image": "https://img.com/henry.jpg"
        "link": "https://link.com/henry",
        "type": "user"
    }
]

Penso che sia abbastanza flessibile perché significa che indipendentemente dal tipo di risorsa che è stata trovata, sarà possibile analizzarla come un oggetto SearchResult generico sul lato client. Ciò significa che possiamo restituire nuove risorse in futuro senza doverci preoccupare di come andrà un parente particolare per analizzarle.

A volte, potrebbe essere necessario fornire dati aggiuntivi per consentire ai client di eseguire rendering personalizzati. Penso che questo potrebbe essere un buon modo per ottenere ciò:

"results": [
    {
        "title": "My Blog Post",
        "description": "My blog post description",
        "image": "https://img.com/icon.jpg",
        "link": "https://link.com",
        "type": "blog-post",
        "extra": {
            "category": "Finance",
            "commentCount": "501"
        }
    },
    {
        "title": "Henry Jacobson",
        "description": "Henry was born in a small village.",
        "image": "https://img.com/henry.jpg",
        "link": "https://link.com/henry",
        "type": "user",
        "extra": {
            "status": "active",
            "topFriends": ["Jerry", "Jamie"]
        }
    }
]

C'è qualcosa di grave in errore con questo approccio e se esiste, quale potrebbe essere un'alternativa migliore?

    
posta Commit 01.05.2018 - 12:13
fonte

1 risposta

0

Il problema è che il client non sa quali campi aspettarsi per ogni risultato.

Dovrai aggiungere una proprietà "_type" per indicare il tipo di ogni risultato e quindi avere la documentazione da qualche parte che indica i campi restituiti per ciascun tipo.

Il client dovrà quindi eseguire una query sulla proprietà _type e programmato con la documentazione per sapere cosa cercare.

ad es. Cerca i gattini e metti tutte le immagini in una lista, mostrando "imageUrl" e ordinate da "cutenessFactor" e tutti i post del blog in un'altra lista, ordinati per "data" e mostrando i primi 20 caratteri di "contenuto"

    
risposta data 01.05.2018 - 13:06
fonte

Leggi altre domande sui tag