Лучший способ написать веб-сервис Asp.Net, чтобы хорошо играть в дикой природе - PullRequest
1 голос
/ 12 мая 2011

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

Каков в настоящее время принятый стандарт для написания такого веб-сервиса, который сегодня хорошо работает в дикой природе?

Ответы [ 2 ]

3 голосов
/ 12 мая 2011

Некоторые идеи, которые приходят на ум из опыта:

  1. Используйте WCF, а не .asmx. WCF делает все то же самое, что и файлы ASMX, и обычно является заменой для служб ASMX (см. здесь и здесь ).
  2. Пишите методы, используя простые типы данных POCO, например List<Person> вместо DataTable. Базовые типы легче сериализуются и будут иметь больше смысла в других средах программирования, поскольку вы хотите, чтобы ваш сервис не зависел от языка.
  3. Предоставляет общие методы CRUD для управления данными. В зависимости от того, как будет использоваться ваша служба, если пользователю необходимо изменить данные, простой метод заключается в предоставлении getBlah(), updateBlah(obj newObj), deleteBlah(obj objToDelete) и т. Д., Которые используют одинаковые типы данных.
  4. Скрыть детали, которые потребитель сервиса не должен знать, вместо того, чтобы просто слепо показывать все ваши типы данных, структуры и имена полей как есть. Это сделает ваш сервис более устойчивым для обработки внутренних изменений, и вы сможете упростить и контролировать то, что видят конечные пользователи. Например, если у вас есть класс Person с 30 свойствами, и только 5 относятся к конечному пользователю, предоставьте класс, который взаимодействует между Person и классом PersonSimple, который предоставляется. Без этого уровня ваши конечные пользователи будут вынуждены изменять ваш код каждый раз, когда вы меняете структуру данных, и вы будете заблокированы этой тесной связью.

Если важна безопасность

  1. Выполните ваш сервис через SSL. Это защищает данные, передаваемые по проводам, от перехвата.
  2. Использовать аутентификацию с использованием метода и сеанса входа или заголовков SOAP. Сервисы по умолчанию являются анонимными, если не существует какой-либо схемы аутентификации. Даже если вы думаете, что никто не найдет ваш сервис, потому что вы предоставляете только URL своим пользователям, он каким-то образом где-то выйдет, и люди попытаются использовать сервис не по назначению. Кроме того, вы можете контролировать, кто что может делать, используя разные логины и схемы авторизации.
0 голосов
/ 23 июля 2014

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

В вашем случае вам не нужно использовать сложный класс, такой как DataTable;Вы можете использовать массив (List <>) простого класса с полями, такими как имя, фамилия и идентификатор.Используя Web Api ASP.NET, вы можете сделать что-то вроде следующего:

1) Создать новый проект WebApi в Visual Studio: например (в VS 2012) C #> Web> ASP.NET MVC 4 Web Application> выберите «Wep Api» в качестве шаблона проекта

Вы увидите проект VS с большим количеством папок, включая одну с именем Models

Для получения справки см .: http://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web-api

2) Создайте новый файл кода модели Person.cs с классом, подобным следующему:

public class Person
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string[] Friends { get; set; }
}

3) Создайте новый файл кода контроллера PersonController.cs с методами для получения, вставки и обновления записей базы данных.Вся необходимая сериализация / десериализация (JSON и XML) и привязка данных выполняются автоматически средой Web Api, установленной шаблоном проекта.

    // Get all the records of persons
    public IList<Person> Get()
    {
        // read database into a list of persons (List<Person>)
        // return List<Person>
    }

Возвращает запись выбранного человека:

   public Person Get(int id)
   {
        // read database for a selected person
   }

Привязка параметров (чтение содержимого JSON / XML, отправленного http POST в объект или в список объектов) также выполняется автоматически, просто:

    // parameter binding: Create a Person object with content from XML/JSON 
    public void ReadPerson(Person p)
    {
       Trace.WriteLine(Person.Id);
    }


    public void ReadPersonList(List<Person> plist)
    {
       Trace.WriteLine(plist.Count);
    }
...