1 Востаннє редагувалося Betterthanyou (30.03.2020 01:53:07)

Тема: Які протоколи використовувати для веб програми

Намагаюся розібратися в HTTP, SOAP, RESTful протоколах...

Потрібно написати кросплатформену програму для Androin, ios i Window для цього я вибрав Xamarin тому що "Apps built using Xamarin look and feel native, because they are Native User Interfaces, Native API Access, Native Performance"

В цій програмі буде можливість для клієнта
- реєструватися (підтримка облікових записів),
- збереження інформації що буде прив'язана до облікового запису

Адміністратора
- управління обліковими записами клієнтів
- доступ до прив'язаної інформації клієнтів

Я не можу додати модуль з доступом до БД в клієнтську програму та програму адміністраторів тому що це не безпечно, в такому випадку в цих програмах буде захардкоджений логін і пароль до БД.
Значить потрібно створити веб програму яка буде мати модуль з доступом до БД, а клієнтські і програми адміністраторів будуть робити запити до цієї веб програми.

Тепер питання: Якщо буде створено Web Application -> Empty -> WebService? То з яким протоколом буде працювати цей веб сервіс ? Протоколи HTTP i SOAP, RESTful це різні шари(layers) мережевого-протоколу ?


Приклад

Програма яка робить запит до веб сервісу

namespace web2
{
    class Program
    {
        static void Main(string[] args)
        {
            //creating object of program class to access methods  
            Program obj = new Program();
            //Calling InvokeService method  
            obj.InvokeService();
        }
        public void InvokeService()
        {
            //Calling CreateSOAPWebRequest method  
            HttpWebRequest request = CreateSOAPWebRequest();

            XmlDocument SOAPReqBody = new XmlDocument();
            //SOAP Body Request  
            SOAPReqBody.LoadXml(@"<?xml version=""1.0"" encoding=""utf-8""?>" + 
                                @"<soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">" +
                                @"<soap:Header>" + 
                                @"<AuthHeader xmlns=""http://tempuri.org/"">" +
                                @"<Username>Username1</Username>" + 
                                @"<Password>Password1</Password>" +
                                @"</AuthHeader>" + 
                                @" </soap:Header>" +
                                @"<soap:Body>" + 
                                @"<HelloWorld xmlns=""http://tempuri.org/""/>" +
                                @"</soap:Body>" + 
                                @"</soap:Envelope>");


            using (Stream stream = request.GetRequestStream())
            {
                SOAPReqBody.Save(stream);
            }
            //Geting response from request  
            using (WebResponse Serviceres = request.GetResponse())
            {
                using (StreamReader rd = new StreamReader(Serviceres.GetResponseStream()))
                {
                    //reading stream  
                    var ServiceResult = rd.ReadToEnd();
                    //writting stream result on console  
                    Console.WriteLine(ServiceResult);
                    Console.ReadLine();
                }
            }
        }

        public HttpWebRequest CreateSOAPWebRequest()
        {
            //Making Web Request  
            HttpWebRequest Req = (HttpWebRequest)WebRequest.Create(@"http://localhost:61711/WebServiceTCW.asmx");
            //SOAPAction  
            Req.Headers.Add(@"SOAPAction:http://tempuri.org/HelloWorld");
            //Content_type  
            Req.ContentType = "text/xml;charset=\"utf-8\"";
            Req.Accept = "text/xml";
            //HTTP method  
            Req.Method = "POST";
            //return HttpWebRequest  
            return Req;
        }
    }
}

Веб серівс

namespace WA_TCW
{
    public class AuthHeader : SoapHeader
    {
        public string Username;
        public string Password;
    }

    /// <summary>
    /// Summary description for WebServiceTCW
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
    // [System.Web.Script.Services.ScriptService]
    public class WebServiceTCW : System.Web.Services.WebService
    {
        public AuthHeader Authentication;
        [WebMethod, SoapHeader("Authentication")]
        public string HelloWorld()
        {
            return "Hello World " + 
                Authentication.Username + 
                " " + 
                Authentication.Password;
        }
    }

}

Я відправляю HTTP запит чому він приходить як SOAP запит ? Я можу так само з HTTP отримати RESTful ?

Раніше була можливість у Visual Stuido така як Add Web Reference, зараз (у 2019 версії) якщо натиснути Add Reference відкривається сторінка з можливістю OpenAPI i gRPC. Як додати Web Reference ? - Я переплутав net framework i core


І так, я гуглив/читав про HTTP, SOAP, RESTful але поки що не розумію як це працює

2

Re: Які протоколи використовувати для веб програми

Воно не сильно розвивається але можете почитати про https://azure.microsoft.com/uk-ua/servi … ce/mobile/

Подякували: Betterthanyou1

3

Re: Які протоколи використовувати для веб програми

Для загального розуміння

Протоколи по рівнях
ETHERNET -> TCP/IP -> HTTP або HTTPS

Формати даних з якими може працювати веб сервіс
XML, HTML, JSON, JSV, CSV, SOAP ...

отож не плутайте протоколи та формати даних
З протоколом великого вибору немає - у вас буде HTTP або HTTPS

а от з форматом обміну даними - все у ваших руках

Подякували: Betterthanyou1

4

Re: Які протоколи використовувати для веб програми

Betterthanyou написав:

Намагаюся розібратися в HTTP, SOAP, RESTful протоколах...

Betterthanyou написав:

Протоколи HTTP i SOAP, RESTful це різні шари(layers) мережевого-протоколу ?

Якось все дуже заплутано...

Betterthanyou написав:

Я відправляю HTTP запит чому він приходить як SOAP запит ?

Ну напевно тому що так був написаний код...

Betterthanyou написав:

Я можу так само з HTTP отримати RESTful ?

Чому ж ні, дотримуйтеся певних рекомендацій і отримаєте.

Якщо я Вас вірно зрозумів і це саме "...демонстраційний проект для портфоліо..." то обирайте HTTP + REST (або gRPC) і вперед (хай щастить).

Подякували: Betterthanyou, leofun012

5

Re: Які протоколи використовувати для веб програми

Для ваших вимог REST'у вистачить (який є architecture style, не протоколом). Протокол буде HTTP для них всіх. SOAP важкий і застарілий, RPС теж важчий (для імплементації) і головні його бенефіти у вашому випадку не використовуватимуться.