microsoft / microsoft/OpenAPI.NET.OData

Refactor the whole project

Aperta
#69 2 commenti 4 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

status:needs-discussion type:feature
Lingua principale
C#
Stelle
240
Fork
70
Merge medio
7h 59m
PR unite (30g)
13

Descrizione

Short summary (3-5 sentences) describing the issue.

Recently, I got a lot of requirements, for example

  1. I don't want to expand on certain element
  2. I don't need this operation
  3. I need this ...
  4. etc..

Yes, we can meet all of these by modifying the codes, by adding settings, etc.
However, i'd think maybe it's time to refactor it in the next major release.

Design

I'd like to use the Dependency Injection to allow customer to customize the converting process.

We need figure out the working flow from OData to OpenAPI. The process steps are certain, at each step, we can create a service to work on it.

Services

We need figure out the services used during converting.
for example:

  1. we should have a OData path provider service
  2. we should have a OpenApi path generator service
  3. We should have a convert engine

Extension methods

I think we need

public static IServiceCollection UseOpenApiOData(IServiceCollection services)
{
        services.AddSingleton<IOpenApiODataConverter>(); // converter or generator
        services.AddSingleton<IODataPathProvider>();
        services.AddSingleton<IODataOpenApiPathHandler>();
        services.AddSingleton<IODataOpenApiOperationHandler>();
.....
        service.AddSingleton<ODataOpenApiOptions>();
        return services;
}

Usage

  1. you can create the OpenApiODataConverter instance (normal way)
  2. you can retrieve it from service provider.
IServiceCollection services= new ServiceCollection();
services.UserOpenApiOData();
IServiceProvider sp = services.CreateServiceProvider();
IOpenApiODataConverter converter = sp.GetService<IOpenApiODataConverter>();
...

Advantage

  1. It can be used in the ASP.NET Core pipeline, for example we can create a middleware to generate the OpenAPI description for a OData service.

  2. It can support to customize the converting. For example, we can replace a certain service using customized service.

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Non sono indicati file sorgente né test. Inizia tracciando il flusso di conversione OData-to-OpenAPI e rivedendo gli IOpenApiODataConverter e IODataPathProvider proposti, i gestori di path e operation e l’esempio di registrazione di UseOpenApiOData. Il lavoro è completato quando sono stati concordati un confine del servizio e un design di dependency injection che supportino la conversione personalizzata.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
csharp
Ambito
backend-api-design
Tipo di issue
Refactoring
Difficoltà
5/5
Tempo stimato
Più di una settimana
Stato di attività
Ferma
Chiarezza
Da chiarire
Idoneità per principianti
20/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.