Подтвердить что ты не робот

Создание ссылок гиперссылки в веб-API

Мне интересно узнать, как другие столкнулись с проблемой создания гипермедийных ссылок для своих веб-API? В частности, я использую веб-API ASP.NET и разрывается между операциями, возвращающими типы связанных с гипермедиамиями, или возвратом самого ресурса, а также наличием гипермедиа-материала позже в конвейере. То есть люди склонны делать такие вещи, как:

public Resource<Order> GetOrder(int id) { 
  return new Resource<Order>() {
      Content = new Order(),
      Links = new LinkCollection<Order>() { new AddOrderLink(), new UpdateOrderLink()}
  }

Или что-то вроде

public Order GetOrder(int id) { return new Order(); }

А затем добавьте гипермедиа-ссылки внутри HttpOperationHandler или пользовательский форматтер или что-то еще?

Если подход больше похож на # 2, как вы узнаете, какие ссылки для генерации? У вас есть стандартный набор ссылок, которые генерируются для всех объектов Order? Атрибуты, украшающие различные операции в OrdersController?

4b9b3361

Ответ 1

Я предпочитаю вариант два (добавление гипермедийных ссылок позже в конвейере) и блог об этом вчера.

Решение заключалось в том, чтобы "обогатить" мои ресурсы гиперссыльными ссылками до того, как они будут возвращены клиенту с помощью обработчика сообщений.

Ответ 2

Вы можете использовать Hyprlinkr из github

Я планирую использовать его в своем следующем проекте, так как он кажется приятным и легким в использовании, и вы можете получить его через пакет nuget.

Ответ 3

Отвечая на этот вопрос, поучительно взглянуть на подход ASP.NET MVC к обработке этого, поскольку ASP.NET MVC может рассматриваться как версия Web API (html-ограниченная версия) (без ручного согласования содержимого), и поскольку он явно сильно повлиял на дизайн веб-API.

В принципе, мы можем использовать пользовательские форматирования для изменения представлений на основе маршрута или атрибута действия. Об этом сообщается тем, как ASP.NET MVC разделяет представления из моделей. В проекте ASP.NET MVC одна модель может быть отображена различными шаблонами представлений. Каждый из этих шаблонов рассматривает в основном "жесткие коды" переходных ссылок (якорь, форму и элементы ссылок) в это конкретное представление модели. Выбор шаблона представления управляется преимущественно по соглашению (имя контроллера и действия), но также может быть жестко закодирован в действии.

Механизм просмотра и соглашение о поиске в ASP.NET MVC можно считать специальным форматом веб-API. Это может быть обобщено так, что для каждого поддерживаемого типа носителя пользовательский форматтер использует данные маршрута - и, необязательно, атрибут, примененный к вызванному методу действия, - для определения состояния ресурса. (В соответствии с этой конвенцией есть преимущество в выборе имен действий, которые отражают состояние ресурса.) Как только форматер знает состояние ресурса, он может делегировать конкретный код форматирования. В этом коде будут указаны определенные для конкретной страны ссылки.

Этот код форматирования, специфичный для конкретной страны, также может делегировать другим субформатам, точно так же, как представления Razor поддерживают состав частичных представлений.

Ответ 4

Я добавил свое решение здесь

Он использует атрибуты класса и свойства в сочетании с методом расширения ApiController для заполнения объекта ResourceLink в вашей организации. Он также может заполнять ссылки для любых свойств коллекции. Это не законченная статья, но она довольно интуитивная и начнет хорошее начало.