Материал: iOS сессия ответы

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Основной файл всё также называется calendar.php, за ним следует вопросительный знак (?), затем — параметр «year» со значением «2016», затем — амперсанд (&), затем — параметр «display» со значением «work-days-and-days-off».

GET-параметры могут изменяться прямо в адресной строке браузера. Например, изменив значение «2016» на «2017» и нажав клавишу Enter, вы перейдёте к календарю на 2017 год.

  1. Понятие и назначение rest & crud (Understanding rest & crud)

REST:основы и принципы

Каждая команда REST сосредоточена вокруг ресурса. В REST ресурс - это действительно все, на что можно указать по протоколу HTTP. Например, изображение, веб-сайт, документ или метеослужба. Возможности практически безграничны.

Проще говоря, REST означает «Передача состояния представления», архитектурный стиль, разработанный для распределенной гипермедиа, или интерфейс прикладного программирования. Вы, наверное, слышали, что последнее называется API. Другой способ думать об API - это определить его как веб-службу, которая соответствует архитектурным принципам REST. Каждый API вызывается с помощью стандартного метода HTTP-запроса: POST, GET, PUT и, реже, DELETE. УДАЛЕНИЕ обычно подразумевается, хотя не обязательно указывается.

Термины, определяющие принципы REST, были введены в диссертацию доктора Роя Филдингса «Архитектурные стили и проектирование сетевой инфраструктуры программного обеспечения». В целом REST можно рассматривать как стандарт в разработке приложений-служб. Он предлагает альтернативу:

Протокол простого доступа к объектам (SOAP)

Общая архитектура брокера объектных запросов (CORBA)

RMI

Многие другие

Принципы REST

Есть шесть основных ограничений REST. Эти:

Клиент-серверный мандат

Этот мандат подчеркивает тот факт, что REST - это распределенный подход, основанный на разделении между клиентом и сервером. Каждая служба имеет несколько возможностей и прослушивает запросы. Запросы отправляются потребителем и принимаются или отклоняются сервером.

Optional

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

Кеш

Кэш требует, чтобы ответы сервера были помечены как кэшируемые или нет. Кэширование помогает смягчить некоторые ограничения безгражданства. Например, запрос, который кэшируется потребителем, чтобы избежать повторной отправки одного и того же запроса дважды.

Интерфейс / Единый контракт

Архитектура RESTful следует принципам, определяющим единый контракт. Это запрещает использование нескольких автономных интерфейсов в API. Вместо этого один интерфейс распространяется посредством гипермедийных соединений.

Многоуровневая система

Именно этот принцип делает архитектуру RESTful такой масштабируемой. В многоуровневой системе несколько уровней используются для увеличения и расширения интерфейса. Ни один из слоев не может видеть другой.

Это позволяет добавлять новые команды и промежуточное ПО, не влияя на исходные команды и работу между клиентом и сервером.

Необязательно: код по запросу

Приложения RESTful не обязательно должны включать Code-On-Demand, но они должны иметь клиент-сервер, без сохранения состояния, кэширование, унифицированный контракт и многоуровневые системы. Code-on-Demand позволяет логике внутри клиентов быть отделенной от логики внутри серверов. Это позволяет обновлять их независимо от логики сервера.

REST: в двух словах

REST относится к набору определяющих принципов разработки API. Он использует протоколы HTTP, такие как GET, PUT, POST, для связывания ресурсов с действиями в рамках отношений клиент-сервер. Помимо мандата клиент-сервер, у него есть несколько других определяющих ограничений. Принципы архитектуры RESTful служат для создания стабильного и надежного приложения, которое предлагает простоту и удовлетворение конечных пользователей.

CRUD: основы и принципы

Теперь, когда вы лучше понимаете архитектуру RESTful, пришло время погрузиться в CRUD.

CRUD - это аббревиатура от CREATE, READ, UPDATE, DELETE. Они образуют стандартные команды базы данных, которые составляют основу CRUD. Многие разработчики программного обеспечения рассматривают эти команды в лучшем случае как примитивное руководство. Это потому, что CRUD не разрабатывался как современный способ создания API. Фактически, CRUD берет свое начало в записях базы данных.

По определению CRUD - это больше цикл, чем архитектурная система. На любом динамическом веб-сайте, вероятно, существует несколько циклов CRUD. Например, покупатель на сайте электронной коммерции может СОЗДАТЬ учетную запись, ОБНОВИТЬ информацию об учетной записи и УДАЛИТЬ вещи из корзины покупок.

Warehouse Operations Manager, использующий тот же сайт, может СОЗДАТЬ записи отгрузки, ПОЛУЧИТЬ их по мере необходимости и ОБНОВЛЯТЬ списки поставок. Иногда в цикле CRUD вместо READ используется извлечение.

Происхождение базы данных

Цикл CRUD разработан как метод функций для улучшения постоянного хранилища - например, с базой данных записей. Как следует из названия, постоянное хранилище переживает процессы, которые его создали. Эти функции воплощают в себе все отличительные черты приложения реляционной базы данных.

В современной разработке программного обеспечения CRUD превзошел свое происхождение как фундаментальные функции базы данных и теперь соответствует принципам разработки динамических приложений, таких как протокол HTTP, DDS и SQL.

Принципы CRUD

Как упоминалось выше, принципы цикла CRUD определены

67.Асинхронды

өп жұмыс істеуге қарағанда жалпы моделі азырақ, бірақ мүмкіндіктері кем емес. Асинхронды модель оқиға циклына негізделген. Оқиға болған кезде (сұраныс келді, файл оқылды, мәліметтер базасынан жауап келді), ол кезектің соңына қойылады. Осы кезекті өңдейтін ағын оқиғаны кезектің басында алады және сол оқиғаға байланысты кодты орындайды. Кезек бос болғанша, процессор жұмыспен айналысады. Node.js осылай жұмыс істейді. Бізде іс-шаралар кезегін өңдейтін жалғыз ағын бар (кластер модулімен - бірнеше ағын болады). Барлық дерлік операциялар блокталмайды. Блокаторлар да қол жетімді, бірақ оларды қолдану өте қиын. Неге екенін келесіде көресіз. 1 + 2 + 1ms сұранысымен бірдей мысалды алайық: сұранымның келуіне байланысты оқиға хабарламалар кезегінен алынады. Біз сұранысты өңдейміз, 1мм жұмсаймыз. Әрі қарай, мәліметтер қорына блоктан тыс асинхронды сұраныс жасалып, басқару дереу беріледі. Біз кезекті оқиғаны кезектен алып, орындай аламыз. Мысалы, біз тағы 1 сұраныс қабылдаймыз, оны өңдейміз, дерекқорға сұраныс жібереміз, басқаруды қайтарамыз және тағы бір рет қайталаймыз. Содан кейін ДБ жауабы бірінші сұранысқа келеді. Онымен байланысты оқиға кезекке қойылады. Егер кезекте ештеңе болмаса, ол дереу орындалады, мәліметтер беріледі және клиентке қайтарылады. Егер кезекте бірдеңе болса, басқа оқиғалардың өңделуін күтуге тура келеді. Әдетте, бір сұранысты өңдеу жылдамдығы көп ағынды жүйенің өңдеу жылдамдығымен және бұғаттау операцияларымен салыстырылатын болады. Ең нашар жағдайда, басқа оқиғалардың өңделуін күтуге уақыт қажет болады және сұрау баяу өңделеді. Бірақ сол сәтте, бұғаттау операциялары бар жүйе жауап алу үшін жай 2мм күте тұрса, блоктамайтын операциялары бар жүйе тағы 2 сұраныстың тағы 2 бөлігін орындай алды! Әрбір сұраныс жалпы алғанда сәл баяулауы мүмкін, бірақ біз уақыт бірлігінде көптеген сұраныстарды өңдей аламыз. Жалпы өнімділік жоғары болады. Процессор әрдайым пайдалы жұмыстармен айналысады. Сонымен қатар, кезекті өңдеуге және оқиғадан оқиғаға ауысуға көп бұрандалы жүйеде жіптер арасында ауысуға қарағанда әлдеқайда аз уақыт кетеді. Сондықтан, блоктаусыз операциялары бар асинхронды жүйелерде жүйеде өзектер санынан артық ағындар болмауы керек. Node.js бастапқыда тек бір ағынды режимде жұмыс істеді және процессорды толығымен пайдалану үшін бірнеше сервер көшірмелерін қолмен көтеріп, олардың арасындағы жүктемені бөлуге тура келді, мысалы, nginx. Енді бірнеше ядролармен жұмыс істеуге арналған кластер модулі пайда болды (осы жазу кезінде ол әлі де тәжірибелік мәртебеге ие). Осы жерде екі жүйенің негізгі айырмашылығы айқын болады.

Синхронды

Бұл модель бәріне белгілі. Біздің қосымшамыз бірнеше ағындарды (бассейн) жасайды, олардың әрқайсысына тапсырма мен деректерді өңдеуге жібереді. Тапсырмалар параллель орындалады. Егер ағындар деректермен бөліспейтін болса, онда бізде синхрондаудың үстеме ақысы болмайды, бұл жұмысты жеткілікті жылдам етеді. Жұмыс аяқталғаннан кейін жіп өлтірілмейді, бірақ келесі тапсырманы күтіп, бассейнде жатыр. Бұл жіптерді құру және жою үстеме ақысын жояды. PHP бар веб-сервер дәл осындай жүйеде жұмыс істейді. Әр сценарий өз ағынымен орындалады. Бір ағын бір сұранысты өңдейді. Бізде жіптер саны өте көп, баяу сұраныстар ұзақ уақыт ағынды алады, жылдамдары дереу өңделеді, жіпті басқа жұмыстарға босатады. Бұл баяу сұраулардың барлық CPU уақытын алуына жол бермейді, сондықтан тез сұраулар іліп қалады. Бірақ мұндай жүйенің белгілі шектеулері бар. Бізге баяу сұраныстардың көп мөлшері келіп түскен кезде жағдай туындауы мүмкін, мысалы, мәліметтер базасымен немесе файлдық жүйемен жұмыс. Мұндай сұраныстар барлық ағындарды алады, сондықтан басқа сұраныстарды орындау мүмкін болмайды. Сұранысты орындау үшін тек 1 мс уақыт қажет болса да, ол уақытында өңделмейді. Мұны ағындардың санын көбейту арқылы шешуге болады, сонда олар баяу сұраныстардың жеткілікті мөлшерін орындай алады. Өкінішке орай, ағындар ОЖ-мен өңделеді және оған процессордың уақыты да бөлінеді. Сондықтан, біз қанша ағын жасасақ, оларды өңдеуге арналған шығындар соғұрлым көп болады және әр жіпке CPU уақыты аз бөлінеді. Жағдайды PHP өзі қиындатады - мәліметтер қорымен, файлдық жүйемен жұмыс жасауды бұғаттау, енгізу-шығару сонымен бірге процессордың уақытын жоғалтады, қазіргі уақытта ешқандай пайдалы жұмыс істемейді. Мұнда біз бұғаттау операцияларының ерекшеліктеріне толығырақ тоқталамыз. Осы жағдайды елестетіп көрейік: бізде бірнеше ағым бар. Әрқайсысы сұраныстың өзін өңдеудің 1 мс, мәліметтер базасына деректерге қол жеткізу және қабылдау үшін 2 мс және алынған деректерді көрсетуден тұратын сұраныстарды өңдейді. Осылайша, біз әр сұраныс үшін 4 мс жұмсаймыз. Деректер базасына сұраныстар жіберген кезде ағын жауап күте бастайды. Деректер қайтарылмайынша, ағын ешқандай жұмыс істемейді. Бұл сұранысқа 4 мс ішінде бос уақыттың 2 мысы! Ия, мәліметтер базасынан мәліметтер алмай, біз парақ бере алмаймыз. Біз күтуіміз керек. Бірақ бұл жағдайда біз жұмыс істемейтін процессордың 50% аламыз! Сонымен қатар, сіз әр ағынға процессор уақытын бөлуге қосымша ОЖ шығындарын түсіре аласыз. Ағындар қаншалықты көп болса, соғұрлым көп шығындар болады. Нәтижесінде бізде көптеген бос уақыттар болады. Бұл уақыт мәліметтер базасына және файлдық жүйеге сұраныстардың ұзақтығына тікелей байланысты. Процессорды толығымен жүктеуге мүмкіндік беретін ең жақсы шешім пайдалы