最小物聯網系統(三)——建立RESTful

Phodal發表於2014-03-06

資料庫的目的在於儲存資料等等的閒話這裡就不多說了,建立一個RESTful的目的在於產生下面的JSON格式資料,以便於我們在Android、Java、Python、jQuery等語言框架或者平臺上可以呼叫,最主要的是可以直接用Ajax來產生更炫目的效果。

{
id: 1,
temperature: 14,
sensors1: 12,
sensors2: 12,
led1: 0
}

資料庫遷移

這個名字是源自於Ruby On Rails在那時候的印象,不直接使用MySQL的目的在於讓我們可以專注於過程。

建立表

表的概念,類似於在Excel中的表,如果你真實不懂資料庫。 讓我們建立一個athomes的表,為什麼是athomes,因為以前在寫android程式的時候就叫的是athome,忽略掉這些將要的因素吧。

php artisan migrate:make create_athomes_table

開啟 app/database/*create_athomes_table.php這裡的*是由日期和某些東西組成的,修改生成的程式碼為下面。

<!--?php  

use Illuminate\Database\Schema\Blueprint;  
use Illuminate\Database\Migrations\Migration;  

class CreateAthomesTable extends Migration {  

    public function up()  
    {  
        Schema::create('athomes', function(Blueprint $table)  
        {  
            $table--->increments('id');  
            $table-&gt;float('temperature');  
            $table-&gt;float('sensors1');  
            $table-&gt;float('sensors2');  
            $table-&gt;boolean('led1');  
            $table-&gt;timestamps();  
        });  
    }  

    public function down()  
    {  
        Schema::drop('athomes');  
    }  

} 

意思大致就是id是自加的,也就是我們在localhost/athome/{id},當我們建立一個新的資料的時候,會自動加上去,最後一個timestamps批的是時間,會包含建立時間和修改時間。 剩下的temperature,sensors1,sensors2是小數,以及只有真和假的led1。

資料庫遷移

我們只是寫了我們需要的資料的格式而並沒有丟到資料庫裡,

php artisan migrate

這個就是我們執行遷移的命令,如果你用phpmyadmin可以直接開啟檢視,沒有的話,可以。

mysql -uroot -p
use iot;
select * from athomes;

就可以看到我們寫的東西,那麼接下來就是建立RESTful 服務了

建立RESTful

用下面的程式碼實現我們稱之為Athomes控制器的建立

php artisan controller:make AthomesController  

就會在app/controllers下面生成下面的程式碼

<!--?php  

class AthomesController extends \BaseController {  

    /** 
     * Display a listing of the resource. 
     * 
     * @return Response 
     */  
    public function index()  
    {  
        //  
    }  

    /** 
     * Show the form for creating a new resource. 
     * 
     * @return Response 
     */  
    public function create()  
    {  
        //  
    }  

    /** 
     * Store a newly created resource in storage. 
     * 
     * @return Response 
     */  
    public function store()  
    {  
        //  
    }  

    /** 
     * Display the specified resource. 
     * 
     * @param  int  $id 
     * @return Response 
     */  
    public function show($id)  
    {  
        //  
    }  

    /** 
     * Show the form for editing the specified resource. 
     * 
     * @param  int  $id 
     * @return Response 
     */  
    public function edit($id)  
    {  
        //  
    }  

    /** 
     * Update the specified resource in storage. 
     * 
     * @param  int  $id 
     * @return Response 
     */  
    public function update($id)  
    {  
        //  
    }  

    /** 
     * Remove the specified resource from storage. 
     * 
     * @param  int  $id 
     * @return Response 
     */  
    public function destroy($id)  
    {  
        //  
    }  

} -->

Laravel Resources

上面的程式碼過於沉重,請讓我用Ctrl+C來帶來點知識吧。。

Verb Path Action Route Name
GET /resource index resource.index
GET /resource/create create resource.create
POST /resource store resource.store
GET /resource/{resource} show resource.show
GET /resource/{resource}/edit edit resource.edit
PUT/PATCH /resource/{resource} update resource.update
DELETE /resource/{resource} destroy resource.destroy

所以我們只需要專注於建立create,edit,show,destory,等等。好吧,你可能沒有耐心了,但是在修改這個之前我們需要先在 app/model加個class

<!--?php  

class Athomes extends Eloquent {  

    protected $table = 'athomes';  


} 

如果你想要的只是控制器Athomes的程式碼的話。。

<?php

class AthomesController extends \BaseController {

    /**
     * Display a listing of the resource.
     *
     * @return Response
     */
    public $restful=true;

    protected $athome;

    public function __construct(Athomes $athome)
    {
        $this--->athome = $athome ;
     }    

    public function index()
    {
        $maxid=Athomes::all();
        return Response::json($maxid);
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return Response
     */
    public function create()
    {
        $maxid=Athomes::max('id');
        return View::make('athome.create')-&gt;with('maxid',$maxid);
    }

    /**
     * Store a newly created resource in storage.
     *
     * @return Response
     */
    public function store()
    {
        // validate
        // read more on validation at http://laravel.com/docs/validation
        $rules = array(
            'led1'=&gt;'required',
            'sensors1' =&gt; 'required|numeric|Min:-50|Max:80',
            'sensors2' =&gt; 'required|numeric|Min:-50|Max:80',
            'temperature' =&gt; 'required|numeric|Min:-50|Max:80'
        );
        $validator = Validator::make(Input::all(), $rules);

        // process the login
        if ($validator-&gt;fails()) {
            return Redirect::to('athome/create')
                -&gt;withErrors($validator)
                -&gt;withInput(Input::except('password'));
        } else {
            // store
            $nerd = new Athomes;
            $nerd-&gt;sensors1       = Input::get('sensors1');
            $nerd-&gt;sensors2       = Input::get('sensors2');
            $nerd-&gt;temperature    = Input::get('temperature');
            $nerd-&gt;led1              = Input::get('led1');
            $nerd-&gt;save();

            // redirect
            Session::flash('message', 'Successfully created athome!');
            return Redirect::to('athome');
        }
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @return Response
     */
    public function show($id)
    {
        $myid=Athomes::find($id);
        $maxid=Athomes::where('id','=',$id)
                        -&gt;select('id','temperature','sensors1','sensors2','led1')
                        -&gt;get();
        return Response::json($maxid);
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return Response
     */
    public function edit($id)
    {
        // get the nerd
        $athome = Athomes::find($id);

        // show the edit form and pass the nerd
        return View::make('athome.edit')
            -&gt;with('athome', $athome);
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  int  $id
     * @return Response
     */
    public function update($id)
    {
        // validate
        // read more on validation at http://laravel.com/docs/validation
        $rules = array(
            'led1'=&gt;'required|',
            'sensors1' =&gt; 'required|numeric|Min:-50|Max:80',
            'sensors2' =&gt; 'required|numeric|Min:-50|Max:80',
            'temperature' =&gt; 'required|numeric|Min:-50|Max:80'
        );
        $validator = Validator::make(Input::all(), $rules);

        // process the login
        if ($validator-&gt;fails()) {
            return Redirect::to('athome/' . $id . '/edit')
                -&gt;withErrors($validator);
        } else {
            // store
            $nerd = Athomes::find($id);
            $nerd-&gt;sensors1       = Input::get('sensors1');
            $nerd-&gt;sensors2       = Input::get('sensors2');
            $nerd-&gt;temperature    = Input::get('temperature');
            $nerd-&gt;led1              = Input::get('led1');
            $nerd-&gt;save();

            // redirect
            Session::flash('message', 'Successfully created athome!');
            return Redirect::to('athome');
        }
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return Response
     */
    public function destroy($id)
    {
        // delete
        $athome = Athomes::find($id);
        $athome-&gt;delete();
        if(is_null($athome))
        {
             return Response::json('Todo not found', 404);
        }
        // redirect
        Session::flash('message', 'Successfully deleted the nerd!');
        return Redirect::to('athome');
    }

}

希望你能讀懂,沒有的話,關注下一節。

相關文章