<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          PhpBoot快速開(kāi)發(fā) RESTful 接口的框架

          聯(lián)合創(chuàng)作 · 2023-09-19 07:30

          PhpBoot

          PhpBoot 是為快速開(kāi)發(fā) RESTful API 設(shè)計(jì)的 PHP 框架。它可以幫助開(kāi)發(fā)者更聚焦在業(yè)務(wù)本身,而將原來(lái)開(kāi)發(fā)中不得不做,但又重復(fù)枯燥的事情丟給框架,比如編寫接口文檔、參數(shù)校驗(yàn)和遠(yuǎn)程調(diào)用代碼等。

          特色

          PhpBoot 框架提供許多主流的特性,如 ORM、依賴注入等。這些特性都經(jīng)過(guò)精心設(shè)計(jì)和選擇(有些是第三方開(kāi)源代碼,如 PHP-DI),但和其他框架相比較,PhpBoot 最顯著的特色是:

          1. 以面向?qū)ο蟮姆绞骄帉懡涌?/strong>

          你肯定看到過(guò)這樣的代碼:

          // **不用** PhpBoot 的代碼
          class BookController
          {
              public function findBooks(Request $request)
              {
                  $name = $request->get('name');
                  $offset = $request->get('offset', 0);
                  $limit = $request->get('limit', 10);
                  ...
                  return new Response(['total'=>$total, 'data'=>$books]);
              }
              
              public function createBook(Request $request)
              ...
          }

          很多主流框架都需要用類似代碼編寫接口。但這種代碼的一個(gè)問(wèn)題是,方法的輸入輸出隱藏在實(shí)現(xiàn)里,這不是通常我們提倡的編碼方式。如果你對(duì)代碼要求更高,你可能還會(huì)實(shí)現(xiàn)一層 Service 接口,而在 Controller 里只是簡(jiǎn)單的去調(diào)用 Service 接口。而使用 PhpBoot,你可以用更自然的方式去定義和實(shí)現(xiàn)接口。上面的例子, 在 PhpBoot 框架中實(shí)現(xiàn)是這樣的:

          /**
           * @path /books/
           */
          class Books
          {
              /**
               * @route GET /
               * @return Book[]
               */
              public function findBooks($name, &$total=null, $offset=0, $limit=10)
              {
                  ...
                  $total = ...
                  return $books;
              }
            
              /**
               * @route POST /
               * @param Book $book {@bind request.request} bind $book with http body
               * @return string id of created book
               */
              public function createBook(Book $book)
              {
                  $id = ... 
                  return $id;
              }
          }

          上面兩份代碼執(zhí)行的效果是一樣的。可以看到 PhpBoot 編寫的代碼更符合面向?qū)ο缶幊痰脑瓌t,以上代碼完整版本請(qǐng)見(jiàn)phpboot-example。    

          2. 輕松支持 Swagger

          Swagger 是目前最流行的接口文檔框架。雖然很多框架都可以通過(guò)擴(kuò)展支持Swagger,但一般不是需要編寫很多額外的注釋,就是只能導(dǎo)出基本的路由信息,而不能導(dǎo)出詳細(xì)的輸入輸出參數(shù)。而 PhpBoot 可以在不增加額外編碼負(fù)擔(dān)的情況下,輕松去完成上述任務(wù),下圖為 findBooks 對(duì)應(yīng)的文檔。更多內(nèi)容請(qǐng)見(jiàn)文檔在線 Demo

          3. 簡(jiǎn)單易用的分布式支持

          使用 PhpBoot 可以很簡(jiǎn)單的構(gòu)建分布式應(yīng)用。通過(guò)如下代碼,即可輕松遠(yuǎn)程訪問(wèn)上面示例中的 Books 接口:

          $books = $app->make(RpcProxy::class, [
                  'interface'=>Books::class, 
                  'prefix'=>'http://x.x.x.x/'
              ]);
              
          $books->findBooks(...);

          同時(shí)還可以方便的發(fā)起并發(fā)請(qǐng)求,如:

          $res = MultiRpc::run([
              function()use($service1){
                  return $service1->doSomething();
              },
              function()use($service2){
                  return $service2->doSomething();
              },
          ]);

          更多內(nèi)容請(qǐng)查看文檔

          4. IDE 友好

          IDE 的代碼提示功能可以讓開(kāi)發(fā)者輕松不少,但很多框架在這方面做的并不好,你必須看文檔或者代碼,才能知道某個(gè)功能的用法。PhpBoot 在一開(kāi)始就非常注重框架的 IDE 友好性,盡可能讓框架保持準(zhǔn)確的代碼提示。比如下圖是 DB 庫(kù)在 PhpStorm 下的使用:

          主要特性

          安裝和配置

          1. 安裝 composer (已安裝可忽略)

          curl -s http://getcomposer.org/installer | php

          2. 安裝 PhpBoot

          composer require "caoym/phpboot"

          3. index.php 加載 PhpBoot

          <?php
          require __DIR__.'/vendor/autoload.php';
          
          $app = \PhpBoot\Application::createByDefault(__DIR__.'/config/config.php');
          $app->loadRoutesFromPath(__DIR__.'/App/Controllers');
          $app->dispatch();

          幫助和文檔

          瀏覽 29
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲码无| 嫩草成人影院 | 性国产果冻裸体XXXX | 在线国产综合视频 | 无码中文字幕在线观看 |