.NET Core Rest API Повторное вложение - PullRequest
0 голосов
/ 10 марта 2019

Я пишу интеграцию REST API с Refit. У меня есть конечная точка под названием /items. У него четыре основных метода. (GetAsync, GetAllAsync, PostSingleAsync, PostMultpileAsync) Однако вы можете углубиться в эту конечную точку, например /items/{itemId}/linkeditems, /items/{itemId}/infocodes ... Эти дочерние конечные точки (linkeditems,infocodes) имеют почти одинаковые методы единственное отличие состоит в том, что все они требуют parentId.

В данный момент я использую общий репозиторий, чтобы сохранить его СУХИМ. Как я могу расширить конечную точку своих предметов, чтобы она поддерживала что-то вроде этого:

public interface IParentRefitApi<TModel> where TModel : BaseModel
{
    [Get("/{id}")]
    Task<TModel> GetAsync(string id);

    [Get("")]
    Task<IEnumerable<TModel>> GetAllAsync();

    [Post("")]
    Task<TModel> PostAsync([Body] TModel payload);

    [Post("/multiple")]
    Task<IEnumerable<TModel>> PostMultipleAsync([Body] IEnumerable<TModel> payload);
}

var itemsEndpoint = RestService.For<IParentRefitApi<Item>>("http://api.example.com/items"); 
var item = await itemsEndpoint.GetAsync();

//Access linked items like this:    
var allLinkedItems = await itemsEndpoint.LinkedItems.GetAllAsync(item.Id);

Можно ли как-то обойти это, все еще используя дженерики? Как можно ограничить вызов дочерней конечной точки для модели, которая не поддерживает вложение?

Может быть, использовать что-то вроде дочерней конечной точки?

public interface IChildRefitApi<TChildModel> where TChildModel : BaseModel
{
     [Get("/{parentId}/childUrl/{childId}")]
     Task<TChildModel> GetAsync(string parentId, string childId);

     [Get("/{parentId}/childUrl")]
     Task<IEnumerable<TChildModel>> GetAllAsync(string parentId);

     [Post("/{parentId}/childUrl")]
     Task<TChildModel> PostAsync(string parentId, [Body] TChildModel payload);

     [Post("{parentId}/childUrl/multiple")]
     Task<IEnumerable<TChildModel>> PostMultipleAsync(string parentId, [Body] IEnumerable<TChildModel> payload);
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...