iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 8
0
Big Data

體育競賽及日常生活裏遇到的數據收集及分析系列 第 8

體育競賽資料收集器:羽球篇之八,資料交換練習。

  • 分享至 

  • xImage
  •  

雖然 laravel 5 原生的api 來實做restful web service,已經可以用神速及簡化來形容,
但是因為筆者很駑鈍,又顯麻煩,所以又搜尋了一下,
畢竟restful web service行之有年,從規格草創,到國際網路大廠爭相提供畢竟restful api資料交換,
其實雖沒硬性規定api至少要有那些內容,但是"版本號"的設置是起碼的要求,
像google maps,google calendar這些強大的服務,不用到好像app就會弱掉的restful api,
都更新了幾版,所以要提供資料交換api,"版本號"是基本的設置。其他的基本要求,因為筆者見識也沒
多廣,就暫不提。

所以在laravel界,似乎restful web service的實作,慢慢的以dingo 為一個不勉強的標準,不少人使用。對不是想太深入laravel 或php的user(如筆者),這是個不錯的選擇。

當然,也有很多按流量(或其他存取值)收費的restful web service平台,也不錯。筆者已經花錢租了一個
php+mysql的空間,當然以自建restful web service為主。

這裏 重度 參考 Ivan Radunovic 網友 的實作。
他說

I used Dingo in over 50 different projects and development speed is absolutely
the biggest plus.

所以讀者諸公不妨撥冗試試。

環境設定:
composer create-project --prefer-dist laravel/laravel badmin 5.2.x

cd badmin

composer require dingo/api:1.0.x@dev   #裝上dingo

#到config/app.php 裏的 providers 設定 array 區塊,加上 此函式庫,

Dingo\Api\Provider\LaravelServiceProvider::class,

#到 .env檔裏 設定參數,除了Ivan Radunovic設的參數外,下面兩個很重要
API_DOMAIN=localhost
API_PREFIX=api

路由器,連結參數的設定
到 app\Http\routes.php 裏加上

$api = app('Dingo\Api\Routing\Router');
$api->version('v1', function ($api) {
    $api->get('test', function () {
        return 'It is ok';
    });

    $api->get('users', 'App\Http\Controllers\Api\UserController@getUsers'); 
});

Ivan Radunovic 網頁有提到的,這裏不翻譯過來或抄襲了,
強調一下 網址的格式,如

http://localhost:8000/api/users?page=2

裏面的api,由API_PREFIX=api設定,

而把 資料表裏的data,轉到json的型式,dingo提供了 TransformerAbstract類別的transform方法,
寫在專屬的,隔開的Transformer檔,
給controller 引用,這是快速打照資料交換api的核心,資料庫的data轉json,很多單一table的data
很方便就這樣轉過去了,而巢狀的data,將在下一次講。

dingo又很貼心的提供分頁服務,

所以筆者再引用一下,

class UserController extends Controller
{
    use Helpers;
    
    public function getUsers()
    {
        
        //$users = User::all();
        $users = User::paginate(2); #一頁有幾筆

        //return $this->response->collection($users, new UserTransformer);
        return $this->response->paginator($users, new UserTransformer);

    }
}

然後在傳回的json格式 data,又貼心的提醒。

http://localhost:8000/api/users

{
  "data": [
    {
      "name": "John Doe",
      "email": "john.doe@gmail.com",
      "added": "2016-12-15"
    },
    {
      "name": "Jane Doe",
      "email": "jane.doe@gmail.com",
      "added": "2016-12-15"
    }
  ],
  "meta": {
    "pagination": {
      "total": 3,
      "count": 2,
      "per_page": 2,
      "current_page": 1,
      "total_pages": 2,
      "links": {
        "next": "http://localhost:8000/api/users?page=2"
      }
    }
  }
}

當傳輸的data量高達上萬筆時,這時用分頁來限制回傳筆數,是必須的設置。


紙本記錄的日子,羽球不太容易找到紙本的範例,還是以棒球做範例,
棒球記錄1
有在販售的表格,
棒球記錄1

優缺點一目了然。
在電腦化的時代,
台灣基層棒球/壘球,不少球隊仍沿用此一記錄的方式。除了紙本的缺點之外,跨場次比賽,紙張愈累積愈多。
統計時加總數據不容易。記錄是職業運動員的靈魂。雖然訪問時,他們會異口同聲的說,個人記錄並不重要,
球隊拿下總冠軍才是終極目標。

而將比賽記錄有結構的儲存下來,有些什麼相關的應用呢? 目前有想到的是,文字旁白播放系統,在上班時不敢
看影像轉播,又極想知道賽事進行,這時文字轉播有其存在必要,除了看比分,稍微可看一些額外資訊。

重點事件的簡易重播系統,是指用一些簡單的圖像,模擬比賽的情況,如球,球拍,球行進軌跡,落點。


上一篇
體育競賽資料收集器:羽球篇之七,修改後端規格。
下一篇
體育競賽資料收集器:羽球篇之九,資料交換練習(II)。
系列文
體育競賽及日常生活裏遇到的數據收集及分析30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言