Sobes.tech
Middle

პროგრამებში middleware-ს რა მიზნით იყენებენ?

sobes.tech AI

პასუხი AI-სგან

ვებ-აპლიკაციებში შუამავალი პროგრამული უზრუნველყოფა — ეს არის შუამავალი პროგრამული უზრუნველყოფა, რომელიც პროცესებს HTTP-შეკითხვებსა და პასუხებს შორის. იგი მდებარეობს ვებ-სერვერისა და აპლიკაციის ძირითადი ლოგიკის შორის.

შუამავალი პროგრამული უზრუნველყოფის ძირითადი ამოცანებია:

  • შეკითხვაზე წინასწარი დამუშავება:
    • მომხმარებლის ავტორიზაცია და ავტენტიფიკაცია.
    • შემოსული მონაცემების ანალიზი (JSON, XML და სხვა).
    • შეკითხვების მონაცემების ვალიდაცია.
    • შეკითხვების ლოგირება.
    • სათაურების დამატება შეკითხვას.
  • პასუხის შემდგომი დამუშავება:
    • პასუხის შეცვლა, მის გაგზავნამდე (მაგალითად, სათაურების დამატება):
    • პასუხის შეკუმშვა.
    • შეცდომების დამუშავება (გამონაკლისები):
  • მიმდინარე ნაკადის მართვა: შუამავალი პროგრამული უზრუნველყოფა შეუძლია შეწყვიტოს შეკითხვაზე მუშაობა და უპასუხოს ადრეულ ეტაპზე (მაგალითად, დაშვების უფლების არარსებობის შემთხვევაში).

შუამავალი პროგრამული უზრუნველყოფის გამოყენების უპირატესობები:

  • მოდულურობა: დავალებების განყოფა, ხელახლა გამოყენებადი კომპონენტების სახით.
  • გაამარტივება: ფუნქციონალობის ადვილად დამატება ან ამოღება, ძირითადი ლოგიკის შეცვლის გარეშე.
  • კოდის წაკითხულობა: პროგრამის სტრუქტურის გაუმჯობესება, გამავალი ოპერაციების გამოყოფით.
  • ტესტირების შესაძლებლობა: ცალკეული შუამავალი პროგრამული უზრუნველყოფა ადვილად ტესტავს დამოუკიდებლად.

PHP-ფრემვორკებში (მაგალითად, Laravel, Symfony, Slim) შუამავალი პროგრამული უზრუნველყოფა ხშირად ხორციელდება კლასების სახით, რომლებიც იმპლემენტირებენ გარკვეულ ინტერფეისს:

<?php

// შუამავალი პროგრამული უზრუნველყოფის სტრუქტურის მაგალითი (ინტერფეისი)
interface RequestHandlerInterface {
    public function handle(RequestInterface $request): ResponseInterface;
}

// შუამავალი პროგრამული უზრუნველყოფის რეალიზაცია (ავტენტიფიკაცია)
class AuthenticationMiddleware implements RequestHandlerInterface {
    public function handle(RequestInterface $request): ResponseInterface {
        // ავტენტიფიკაციის შემოწმება
        if (!isAuthenticated()) {
            // თუ მომხმარებელი არ არის ავტორიზებული, შეწყვეტა და შეცდომის დაბრუნება
            return new Response(401, [], 'Unauthorized');
        }

        // თუ ყველაფერი კარგად არის, გადაცემა შეკითხვა შემდეგი დამუშავებლისთვის (ან ძირითადი ლოგიკისთვის)
        return $this->nextHandler->handle($request);
    }
}