Статьи

Как разработать RESTful веб-сервис в ASP.NET Web API

Вступление

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

Я собираюсь, шаг за шагом, объяснить, как разработать веб-сервис RESTful в ASP .NET с веб-API. 

Сначала загрузите новейшую визуальную студию в свою систему. Это бесплатно для учебных целей.

Также загрузите SOAPUI для тестирования нашего приложения  здесь .

Я написал еще одну статью в .net Core, вам это тоже может понравиться.

Давайте начнем наш проект:

Шаг 1

Сначала создайте проект веб-приложения ASP.NET в Visual Studio и назовите его StudentRegistrationDemo2 . Для этого выберите Файл-> Создать-> Проект-> Веб-приложение ASP.NET (см. Окно ниже) и нажмите ОК.

Как только вы нажмете кнопку OK, вы увидите окно ниже, где вам нужно выбрать Web API и нажать кнопку OK. 

        После того, как вы нажмете кнопку ОК, он создаст следующую структуру проекта:

Шаг 2

Теперь мы создадим следующие классы ресурсов для обработки наших  сервисов GET, POST, PUT и DELETE . Щелкните правой кнопкой мыши папку « Models » в окне проводника проекта и выберите « Add => Class» (см. Ниже).

Измените Class Student.cs как показано ниже:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace StudentRegistrationDemo2.Models
{
    public class Student
    {
        String name;

        public String Name
        {
            get { return name; }
            set { name = value; }
        }

        int age;

        public int Age
        {
            get { return age; }
            set { age = value; }
        }

        String registrationNumber;

        public String RegistrationNumber
        {
            get { return registrationNumber; }
            set { registrationNumber = value; }
        }


    }
}

Шаг 3

Выполните шаг 2 выше, чтобы создать и добавить ниже два класса в папке Models :

Первый — StudentRegistration , это одноэлементный класс, который будет содержать список зарегистрированных студентов, включая все операции для запросов GET, POST, PUT и DELETE

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace StudentRegistrationDemo2.Models
{
    public class StudentRegistration
    {
        List<Student> studentList;
        static StudentRegistration stdregd = null;

        private StudentRegistration()
        {
            studentList = new List<Student>();
        }

        public static StudentRegistration getInstance()
        {
            if (stdregd == null)
            {
                stdregd = new StudentRegistration();
                return stdregd;
            }
            else
            {
                return stdregd;
            }
        }

        public void Add(Student student)
        {
            studentList.Add(student);
        }

        public String Remove(String registrationNumber)
        {
            for (int i = 0; i < studentList.Count; i++)
            {
                Student stdn = studentList.ElementAt(i);
                if (stdn.RegistrationNumber.Equals(registrationNumber))
                {
                    studentList.RemoveAt(i);//update the new record
                    return "Delete successful";
                }
            }

            return "Delete un-successful";
        }

        public List<Student> getAllStudent()
        {
            return studentList;
        }

        public String UpdateStudent(Student std)
        {
            for (int i = 0; i < studentList.Count; i++)
            {
                Student stdn = studentList.ElementAt(i);
                if (stdn.RegistrationNumber.Equals(std.RegistrationNumber))
                {
                    studentList[i] = std;//update the new record
                    return "Update successful";
                }
            }

            return "Update un-successful";
        }


    }
}

Второй класс — StudentRegistrationReply , этот класс будет использоваться для ответа на сообщение клиентскому приложению в качестве ответа.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace StudentRegistrationDemo2.Models
{
    public class StudentRegistrationReply
    {
        String name;

        public String Name
        {
            get { return name; }
            set { name = value; }
        }
        int age;

        public int Age
        {
            get { return age; }
            set { age = value; }
        }
        String registrationNumber;

        public String RegistrationNumber
        {
            get { return registrationNumber; }
            set { registrationNumber = value; }
        }
        String registrationStatus;

        public String RegistrationStatus
        {
            get { return registrationStatus; }
            set { registrationStatus = value; }
        }
    }
}

Шаг 4 

Настало время представить классы контроллеров для обработки веб-запросов GET, POST, PUT и DELETE . В этом примере мы создадим отдельные контроллеры для запросов GET, POST, PUT и DELETE, даже если в этом нет необходимости, но для большей ясности я использую отдельные контроллеры. Для всех вышеперечисленных сервисов подойдет даже один контроллер, но в соответствии с хорошим принципом разработки у нас должен быть отдельный контроллер, чтобы приложение было легко обслуживать и отлаживать.

Давайте начнем с запроса GET и POST . Щелкните правой кнопкой мыши   папку Controllers и выберите    Add => Controller.   В приведенном ниже окне выберите Контроллер Web API 2 — Пусто.

Назовите первый контроллер как  StudentRetriveController и нажмите  кнопку Добавить (см. Ниже).

Теперь измените  StudentRetriveController, как показано ниже:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

using StudentRegistrationDemo2.Models;

namespace StudentRegistrationDemo2.Controllers
{
    //GET api/studentretrive
    public class StudentRetriveController : ApiController
    {
        public List<Student> GetAllStudents()
        {
            return StudentRegistration.getInstance().getAllStudent();
        }
    }
}

Если вы посмотрите на код, это так просто. Нам не нужно исключительно упоминать, является ли это методом запроса GET или нет. Это даже не требует упоминания пути ресурса. Веб-API автоматически считает его запросом GET, поскольку имя метода начинается с ключевого слова «Get» (GetAllStudent), а в пути к ресурсу добавляется «api» в начале и имя контроллера (все строчными буквами) в оно вернулось. Таким образом, любой вызов GET с путем к ресурсу » / api / studentretrive » вызовет описанный выше метод » GetAllStudents «. Но если вы реализуете более одного метода GET, вы должны четко указать путь к ресурсу.

Шаг 5

Настало время представить контроллер для обработки  запроса POST . Просто выполните шаг 4 и создайте  StudentRegistrationController и измените его, как показано ниже:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

using StudentRegistrationDemo2.Models;

namespace StudentRegistrationDemo2.Controllers
{
    public class StudentRegistrationController : ApiController
    {
        public StudentRegistrationReply registerStudent(Student studentregd)
        {
            Console.WriteLine("In registerStudent");
            StudentRegistrationReply stdregreply = new StudentRegistrationReply();
            StudentRegistration.getInstance().Add(studentregd);
            stdregreply.Name = studentregd.Name;
            stdregreply.Age = studentregd.Age;
            stdregreply.RegistrationNumber = studentregd.RegistrationNumber;
            stdregreply.RegistrationStatus = "Successful";

            return stdregreply;
        }

    }
}

Теперь мы закончили наш первый этап, и пришло время протестировать приложение.

Шаг 6

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

Подождите, пока вы не увидите браузер, как показано ниже:

Теперь сервер работает, и мы сделаем наш первый вызов веб-службы, т.е. сначала вызов GET .

Шаг 7

Я надеюсь, что вы уже установили SOAPUI в вашей системе. Если нет, загрузите SOAPUI  отсюда . Теперь откройте приложение и в меню «Файл» выберите «Новый проект REST» (« Файл»> «Новый проект REST» ), скопируйте и вставьте приведенный ниже URL-адрес и измените номер порта 63053, если он отличается в вашей системе. Затем нажмите кнопку ОК.

http: // localhost: 63053 / api / studentretrive (обратите внимание на URL. Мы используем имя контроллера studentretrive (StudentRetriveController) в качестве локатора ресурсов)

Как только проект создан, просто нажмите зеленую кнопку со стрелкой, и вы увидите пустую запись, как показано ниже:

Причина очевидна, так как наш список учеников пуст. Мы должны вставить несколько записей здесь. Для добавления записей мы будем использовать наш POST сервис. Давайте проверим наш сервис POST сейчас.

Шаг 8

Просто выполните шаг 7, создайте новый проект REST и добавьте следующий URL:

HTTP: // локальный: 63053 / API / studentregistration

Но здесь нам нужно сделать некоторые дополнительные настройки. Сначала выберите POST из списка методов и добавьте запись в Media Type для вставки в приложение. Теперь нажмите зеленую кнопку со стрелкой: 

Теперь повторите шаг 7 и посмотрите:

Теперь повторите шаг 8, вставьте еще несколько записей и повторите шаг 7, чтобы проверить результат.

Все идет нормально. Теперь мы собираемся завершить нашу последнюю часть этого проекта, добавив сервисы PUT и DELETE .

Шаг 9

Выполните шаг 4 и добавьте два контроллера соответственно:  StudentUpdateController и StudentDeleteController. M odify как , как показано ниже:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

using StudentRegistrationDemo2.Models;

namespace StudentRegistrationDemo2.Controllers
{
    public class StudentUpdateController : ApiController
    {
        public String PutStudentRecord( Student stdn)
        {
            Console.WriteLine("In updateStudentRecord");
            return StudentRegistration.getInstance().UpdateStudent(stdn);
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

using StudentRegistrationDemo2.Models;

namespace StudentRegistrationDemo2.Controllers
{
    public class StudentDeleteController : ApiController
    {
        [Route("student/remove/{regdNum}")]

        public String DeleteStudentRecord(String regdNum)
        {
            Console.WriteLine("In deleteStudentRecord");
            return StudentRegistration.getInstance().Remove(regdNum);
        }
    }
}

Теперь посмотрим на приведенный выше класс контроллера. Какие различия вы заметили? Маршрут : здесь мы используем Маршрут, чтобы особо указать местоположение ресурса. У вас может возникнуть вопрос о том, нужно ли нам добавлять несколько служб POST или GET и как различать каждый метод. Не беспокойтесь, мы можем сделать это, как показано ниже:

Сначала с другой подписью метода 

С другой подписью метода:

 GetAllStudents(){}//default 

 GetStudent(Student object){} 

 GetStudentRec(String registrationNumber){} 

и с помощью  Route

 [Route("student/remove/{regdNum}")] 

 DeleteStudent(String regdNum){} 

 [Route("student/removeall")] 

 DeleteAllStudent(){} 

Теперь давайте протестируем все сервисы, которые мы реализовали до сих пор.

Шаг 10

Теперь используйте сервис POST и добавьте три записи. В одной из записей укажите age = 270, что, конечно, неверно. При вызове GET сначала проверьте записи. Теперь мы собираемся исправить вышеуказанное значение с помощью нашего теста запроса PUT. Создайте новый проект REST и добавьте следующий URL. На этот раз выберите метод PUT, добавьте запись, которую нужно изменить, и нажмите кнопку с зеленой стрелкой.

HTTP: // локальный: 63053 / API / studentupdate

Теперь проверьте записи:

Мы достигли конца нашего проекта. Теперь давайте проверим запрос DELETE. Создайте новый проект и добавьте приведенный ниже URL, а на этот раз выберите тип метода DELETE.

HTTP: // локальный: 63053 / студент / удалить / 12346

Теперь просто повторите запрос GET и проверьте результат.

Надеюсь, вам понравилась эта статья. Дайте мне знать любые вопросы, которые могут у вас возникнуть в разделе комментариев. Благодаря!


Если вам понравилась эта статья и вы хотите больше узнать о ASP.NET, ознакомьтесь с этой коллекцией учебников и статей  по всем вопросам ASP.NET.