2014-10-08 1 views
1

В основном я пишу API с использованием Web API 2 и Entity Framework на бэкэнд.Внешние ключи в Web API 2 - Лучшие практики?

То, что я не уверен в том, что делать с иностранными ключами на моих моделях.

Скажите, что я получил людей собственности с внешним ключом к порядка собственности.

Иногда клиенту нужна собственность человека, иногда это не так. Как мне это сделать?

Должен ли я создать 2 метода: /апи/чел/1 < - возвращает человека без того /апи/personwithorder/1 < - возвращает лицо с заказом

Кажется ужасно много методов в мое мнение.

Я знаю, что существует атрибут queryable, который предоставляет поддержку клиенту для использования аргумента $ extend для включения свойств по своему желанию. Однако я бы предпочел не использовать запрашиваемый атрибут, если я могу его избежать.

Каковы ваши предложения?

+0

Если вам нужны две разные вещи, почему у вас есть два метода: «ужасно много»? Вы могли бы передать параметр флага, чтобы возвращать заказы слишком – DavidG

+0

, почему бы просто не просто вернуть человека с свойством order и позволить клиенту делать с ним так, как они будут? или если это не подходит, добавьте в свой флаг флаг, который, если true вернет свойство order, а если нет, не будет? – theDarse

+0

@DavidG Спасибо. Я закончил использование флагов, чтобы клиент мог указать, включать ли свойства или нет. – JensOlsen112

ответ

2

Сверху моей головы, вот несколько вариантов.

Вариант 1

Несколько методов в API

public Person GetPerson() { ... } 
public Person GetPersonWithOrders() { ... } 

Вариант 2

Pass флаг методу:

public Person GetPerson(bool getOrders) { ... } 

Вариант 3

Вы можете использовать OData, чтобы позволить вызывающему абоненту запрашивать данные.

+0

Спасибо за ваш ответ. Вариант один мог бы сделать мой API довольно беспорядочным, поскольку он разоблачил бы целую кучу методов. Мне нравится вариант 2 - я думаю, я могу пойти с этим. – JensOlsen112

2

Чтобы расширить опции DavidG 3 от использования OData, вот как вы бы это сделать:

  1. Install-package Microsoft.AspNet.WebApi.OData

  2. Создать PeopleController наследующий ODataController

  3. Настройка веб- API-модель OData:

    modelBuilder.EntitySet<Person>("People");

  4. Определите метод Get как возвращение к IQueryable<Person>

  5. В коде вызова, добавьте пункт expand к URL, чтобы указать дочерний объект вы хотели бы выставить, как это: /api/People(1)?$expand=Orders

Немного больше об этом регистрирует маршрут OData, но это стандартная конфигурация, которую вы можете найти в любом sample project.

OData действительно очень гибкий и заботится о тоннах вопросов о том, как вы должны создавать свои URL-адреса.

Смежные вопросы