Stap 1: Stap 1: codering van de wolk
Geweldig! Je hebt gemaakt aan stap 1. Hier zullen we bouwen de webservice waarnaar onze Arduino Yun zal het verzenden van de gegevens (POST). Het idee is dat het leest de gegevens van onze gas sensor en die naar de server verzenden, zodat we deze gegevens gebruiken kunnen als wij dat nodig achten.
Ik zal niet uitleggen de setup van de webserver. In mijn geval ben ik met behulp van een DigitalOcean VPS een stapel LEMP uitgevoerd. Om te halen zulks voor werkzaamheden u moeten zorgvuldig aandacht besteden aan de PHP modules die uw webserver is geïnstalleerd.
Installeren van Lumen
Eerst installeren op een verse installatie van het Lumen micro kader op uw server. Ik heb de Lumen installateur toegevoegd aan de installateur van het pakket "composer". Dus alles wat ik moet doen is:
$ lumen new api
Als alternatief kunt u kopiëren Lumen via FTP downloaden van de bestanden op de website van Lumen.
Vervolgens hebben we omhoog om de ".env"-bestand te bewerken. Bewerk de juiste inloggegevens voor uw MYSQL database, gebruikersnaam en wachtwoord. Hierdoor wordt de Lumen kunnen toegang krijgen tot de database op uw server.
Belangrijk: Controleren of Lumen correct door te gaan naar de openbare map op uw server is geïnstalleerd. Het moet "Lumen" worden weergegeven.
Codering van de API
Ik schreef dit deel als een kopie plakken tutorial. Waarom? Want als je code kunt, krijg je wat het allemaal betekent. Als je niet kan code het geen gebruik dit uit te leggen. Zou er een grote vraag, dat zal ik het dienovereenkomstig bijwerken.
We kozen voor Lumen, omdat het is een echt klein kader (vandaar de "micro" deel) en het is echt gemakkelijk om een eenvoudige API.
Eerst omhoog. Maak een nieuw bestand voor de migratie dus maak de tabellen in de database. U kunt het alles wat die je wilt bellen. Ik noem het "data", vanwege een gebrek aan inspiratie.
$ php artisan make:migration create_data_table –create=data
Ga naar de "database/migraties" map en open het php-bestand voor migratie die u net hebt gemaakt. Bewerken om te lijken op dit.
<?php use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration;class CreateData extends Migration { /** * Run the migrations. * * void */ public function up() { Schema::create('data', function (Blueprint $table) { $table->increments('id'); $table->float('pollution'); $table->double('longitude',8,6); $table->double('latitude',8,6); $table->timestamps(); }); } /** * Reverse the migrations. * * void */ public function down() { Schema::drop('data'); } }
Vervolgens maken we een model voor de database door het creëren van een nieuw bestand in de map "app/modellen". (De map is er niet dus moet u dat ook). Nogmaals: gegevens vervangen door de naam die u hebt gekozen.
<?php use Illuminate\Database\Eloquent\Model;class Data extends Model { protected $fillable = ['pollution', 'longitude', 'latitude']; }
Nu moeten we een controller die de invoer van de gegevens beheert maken. Maak een nieuw bestand in de map ' app/http/domeincontrollers' {name}controller.php. Mijne heet DataController.php
<?php namespace App\Http\Controllers;use Laravel\Lumen\Routing\Controller as BaseController; use App\Models\Data; use Illuminate\Http\Request;class DataController extends BaseController { public function index(){ $data = Data::all(); return response()->json($data); } public function createData(Request $request){ $find = Data::where('longitude', $request->longitude)->where('latitude', $request->latitude)->get(); if($find->isEmpty()){ $data = Data::create($request->all()); return response()->json($find); }else{ $find = Data::where('longitude', $request->longitude)->where('latitude', $request->latitude)->first(); $update = Data::find($find->id); $update->pollution = $request->pollution; $update->save(); return response()->json($update); } } public function deleteData($id){ $data = Data::find($id); $data->delete(); return response()->json('success'); } public function getCoords($lat, $lon){ $data = Data::whereBetween('longitude', [($lon-0.2), ($lon + 0.2)])->whereBetween('latitude', [($lat - 0.2), ($lat + 0.2)])->get(); return response()->json($data); }}
Laatste stap is het bijwerken van het bestand routes.php, zodat onze api kan worden benaderd vanuit de buitenkant. Hoofd over de map "app/http" en het "routes.php" bestand bewerken. Hierdoor wordt de api toegankelijk door te gaan naar "www.domain.tld/api/v1/data".
$app->group(['prefix' => 'api/v1','namespace' => 'App\Http\Controllers'], function($app) { $app->get('data','DataController $app->get('places/{lat}/{lon}','DataController $app->post('data','DataController $app->delete('data/{id}','DataController
That's it! U klaar bent met uw API.
? >