javascript - Vad är bästa praxis för att skapa requestBody i loopback 4?


För närvarande arbetar jag på Loopback4 och jag hade detta problem.

    @requestBody({
      content: {
        'application/json': {
          schema: getModelSchemaRef(LoginCredentials, {
            title: 'Login'
          })
        },
      }
    }) credentials: LoginCredentials

I detta kodblock skapade jag en modell för förfrågningskroppen. Är detta det bästa sättet att definiera förfrågningskroppen?

Svar #1

Är detta det bästa sättet att definiera begärans kropp?

Ja. Modellers huvudsyfte är att vara huvudgränssnittet för att definiera formen på alla data. Detta möjliggör återanvändning över olika lager (såsom REST och Repository) och uppmuntrar till att skapa en enda sanningskälla. Detta innebär bättre långsiktig kodunderhållbarhet eftersom problem som data designdrift och upprepad kod minskar.

Finns det andra sätt att definiera en request body?

Ja. Förfrågningskroppsdekorationen (@requestBody()) accepterar objekt enligt OpenAPI 3.0-specifikation. Därför är det möjligt att skriva OpenAPI-specifikationen istället för att förlita sig på getModelSchemaRef() för att generera den från en modell. Detta bör dock göras sparsamt för att mildra de ovan nämnda problemen.

Vad händer om jag har för många modeller?

Artefakter som startas kan sparas i nästlade kataloger; Därför kan modeller delas upp efter deras affärsområden. Till exempel kan modeller som rör autentisering sparas under src/models/auth/MyModel.model.ts.

Kodsegregering bortom modeller

En annan lösning är att separera koden med hjälp av komponenter. Om det görs rätt kan komponenter möjliggöra nästan fullständig segregation av koden genom att dölja bootstrap-logik och artefakter från huvudkodbasen. Till exempel kan all autentiseringskod och artefakter - oavsett kontrollanter, datakällor och modeller - hållas under src/components/auth/*. Ur resten av applikationens perspektiv är den enda åtgärden som krävs att binda komponenten med app.component(MyAuthComponent) och eventuellt lite bindningskonfiguration. Detta innebär att det finns ett tydligt ansvarsskiljande, vilket förbättrar kodläsbarheten eftersom utvecklare inte behöver se implementationsdetaljerna för den segregerade koden om det inte är nödvändigt.