<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Microservices &#8211; Blog Tarikh Agustia</title>
	<atom:link href="https://tarikhagustia.id/category/software-architecture/microservices/feed/" rel="self" type="application/rss+xml" />
	<link>https://tarikhagustia.id</link>
	<description>tarikhagustia.id Adalah sebuah situs pembelajaran tingkat lanjut</description>
	<lastBuildDate>Fri, 20 Dec 2019 04:21:56 +0000</lastBuildDate>
	<language>id-ID</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.6.14</generator>

<image>
	<url>https://tarikhagustia.id/wp-content/uploads/2017/11/cropped-z3376104only-T-32x32.jpg</url>
	<title>Microservices &#8211; Blog Tarikh Agustia</title>
	<link>https://tarikhagustia.id</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Membangun Microservices sederhana dengan PHP, NodeJS dan Docker – Bagian 3 (Product Service)</title>
		<link>https://tarikhagustia.id/membangun-microservices-sederhana-dengan-php-nodejs-dan-docker-bagian-3-product-service/</link>
		
		<dc:creator><![CDATA[Tarikh Agustia]]></dc:creator>
		<pubDate>Fri, 20 Dec 2019 00:32:57 +0000</pubDate>
				<category><![CDATA[Microservices]]></category>
		<category><![CDATA[microservices]]></category>
		<guid isPermaLink="false">https://tarikhagustia.id/?p=148</guid>

					<description><![CDATA[Assalamu&#8217;alaikum Wr, Wb. Pada artikel ini kita akan fokus membuat Product Service, Service ini akan Menggunakan NodeJS dan MongoDB sebagai database nya. Alasan admin menggunakan NodeJS dan mongoDB yaitu admin ingin menunjukan keberagaman dalam membangun suatu microservices. Tidak ada aturan...]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image"><img loading="lazy" width="1024" height="576" src="https://tarikhagustia.id/wp-content/uploads/2019/12/Membangun-Microservice-Sederhana-dengan-PHP-NodeJS-dan-Docker-1024x576.png" alt="Membangun Microservice Sederhana dengan PHP NodeJS dan Docker" class="wp-image-126" srcset="https://tarikhagustia.id/wp-content/uploads/2019/12/Membangun-Microservice-Sederhana-dengan-PHP-NodeJS-dan-Docker-1024x576.png 1024w, https://tarikhagustia.id/wp-content/uploads/2019/12/Membangun-Microservice-Sederhana-dengan-PHP-NodeJS-dan-Docker-300x169.png 300w, https://tarikhagustia.id/wp-content/uploads/2019/12/Membangun-Microservice-Sederhana-dengan-PHP-NodeJS-dan-Docker-768x432.png 768w, https://tarikhagustia.id/wp-content/uploads/2019/12/Membangun-Microservice-Sederhana-dengan-PHP-NodeJS-dan-Docker.png 1280w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>Assalamu&#8217;alaikum Wr, Wb. Pada artikel ini kita akan fokus membuat Product Service, Service ini akan Menggunakan NodeJS dan MongoDB sebagai database nya. Alasan admin menggunakan NodeJS dan mongoDB yaitu admin ingin menunjukan keberagaman dalam membangun suatu microservices. Tidak ada aturan yang baku mengenai bahasa pemrograman maupun database yang akan kalian pakai. Pilih lah bahasa pemrograman dan database yang cocok untuk mengandle logic yang ada pada Service yang akan dibuat.</p>



<h3>Installasi</h3>



<p>Kali ini kita akan menggunakan Framework nodejs yang cukup populer yaitu ExpressJS, Pastikan kalian sudah menginstall NodeJS dan MongoDB ya.</p>



<p>Seperti yang kita bahas pada artikel <a href="https://tarikhagustia.id/membangun-microservices-sederhana-dengan-php-nodejs-dan-docker-bagian-2-authentication-service/">sebelumnya</a> bahwa struktur folder yang kita buat seperti ini :</p>



<pre class="wp-block-code"><code>~/Documents/code/microservices/
- authentication
- products</code></pre>



<p>untuk memulai installasi kalian tinggal pindah ke folder ~/Documents/code/microservices/ kemudian ketik command dibawah ini :</p>



<pre class="wp-block-code"><code>npx express-generator products</code></pre>



<p>Maka folder products akan terbuat beserta file &#8211; file yang dibutuhkan untuk membuat service products, jika kalian menemukan masalah pada saat installasi, silakan buka dokumentasi resmi <a href="https://expressjs.com/en/starter/generator.html">disini</a>.</p>



<p>Ketik perintah ini untuk memastikan aplikasi Express kalian berjalan</p>



<pre class="wp-block-code"><code>npm run start</code></pre>



<h3>Membuat Endpoint</h3>



<p><strong>PENTING : </strong>Perlu kalian ketahui bahwa beberapa service harus memiliki middleware untuk menghandle JWT Token, simple nya setiap service harus bisa memvalidasi apakah token yang dikirimkan dari User masih berlaku atau tidak, ini berlaku pada setiap service yang akan di diakses oleh user. Dan juga setiap service yang memakai middleware JWT diharuskan memakai JWT_SECRET key yang sama.</p>



<p>Kita akan mengambil contoh kasus dimana pada service ini terdapat dua endpoint yaitu, seperti pada artikel sebelumnya bahwa /products akan diarahkan ke Service Products jadi kita buat nya / dan /seeder saja.</p>



<pre class="wp-block-code"><code># End Point ini akan dibuat public
/products
# End Point berfungsi sebagai seeder yang nantinya akan mengisi data products di database dan endpoint ini akan dibuat secure
/products/seed
</code></pre>



<p>Supaya service kita dapat menghandle token dan juga supaya service kita dapat terkoneksi dengan mongodb, tentunya kita butuh yang namanya packages untuk mempermudah. Sisipkan packages berikut di packages.json</p>



<pre class="wp-block-code"><code>"dependencies": {
    ....
    "jsonwebtoken": "^8.5.1",
    "mongoose": "^5.7.13",
    ....
  }</code></pre>



<p>Setelah itu tentunya kita membutuhkan namanya file konfigurasi untuk menyimpan variable seperti konfigurasi database, dan JWT_SECRET. Buat file di config/keys.js kemudian sisipkan script berikut :</p>



<pre class="wp-block-code"><code>module.exports = {
    mongoURI: process.env.MONGO_URL || "mongodb://root:root@localhost:27017/data?authSource=admin",
    jwtSecret: process.env.JWT_SECRET || "SuperSecretKey**2019"
};</code></pre>



<p>Selanjutnya kita akan membuat model untuk data Product kita, buat file models/Product.js dan sisipkan script berikut :</p>



<pre class="wp-block-code"><code>const mongoose = require("mongoose");
const schema = mongoose.Schema;

const ProductSchema = new schema({
    name:{
        type: String,
        required: true
    },
    price:{
        type: Number,
        required:true
    },
    created_at:{
        type: Date,
        default:Date.now
    }
});

module.exports = Product = mongoose.model("products", ProductSchema);</code></pre>



<p>Kemudian kita akan membuat routes nya, edit / buat file routes/index.js dan sisipkan script berikut : </p>



<pre class="wp-block-code"><code>var express = require('express');
var router = express.Router();
let Product = require("../models/Product"); 
let config = require("../config/keys")






/**
 * The Middleware
 */

// a middleware sub-stack shows request info for any type of HTTP request to the /user/:id path
router.use('/seed', function (req, res, next) {
  console.log(config.jwtSecret)
  let token = req.headers['Authorization']; // Express headers are auto converted to lowercase
  if(token == undefined){
    res.status(403).json({
      message: "Please provide token",
      status_code: 403
    })
  }else{
    if (token.startsWith('Bearer ')) {
      // Remove Bearer from string
      token = token.slice(7, token.length);
    }

    
    if (token) {
      jwt.verify(token, config.jwtSecret, (err, decoded) => {
        if (err) {
          res.status(403).json({
            message: "Invalid token",
            status_code: 403
          })
        } else {
          req.decoded = decoded;
          next();
        }
      });
    } else {
      res.status(403).json({
        message: "Please provide token",
        status_code: 403
      })
    }
  }
  
})
router.get('/seed', function(req, res, next) {
  let data = [];
  let length = 100; // user defined length

  for(let i = 0; i &lt; length; i++) {
     new Product({
       name: "Product name " + i,
       price: 15000
     }).save().then(() => console.log("Success"))
  }
  res.send(`Seeding ${length} complete`)
});
/**
 * Get Products list
 */
router.get('/', function(req, res, next) {
  Product.find({}, function(err, results) {
    res.send(results)
  })
});


module.exports = router;
</code></pre>



<p>Kemudian kita edit file app.js dan sisipan script berikut :</p>



<pre class="wp-block-code"><code>var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

var indexRouter = require('./routes/index');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

// MongoDB
const db = require("./config/keys").mongoURI;
const mongoose = require("mongoose");
console.log(db)
mongoose
    .connect(db, {useNewUrlParser: true, auth:{authdb:"admin"}})
    .then(() => console.log("mongoDB Connected"))
    .catch((err) => {
      console.log(err)
      process.exit(1)
    });

module.exports = app;
</code></pre>



<p>Oke sampai saat ini kita sudah berhasil membuat service products. <strong>PS :</strong> Admin anggap kalian sudah mengerti ya dalam pembuatan API menggunakan NodeJS karena disini admin hanya memberikan contoh service sederhana, Kalau kalian ingin berkreasi dengan contoh kasus lain silakan.</p>



<p>Okay, saat nya kita mencoba.</p>



<p>Buka aplikasi Postman kemudian coba hit di endpoint <a href="http://localhost:3000/">http://localhost:3000/</a>. Kalian pasti akan mendapatkan response array kosong karena kita belum melakukan seeder database. untuk melakukan seeder database kalian kunjungi <a href="http://localhost:3000/">http://localhost:3000/</a>seed.</p>



<p>Dan pastinya kalian akan mendapatkan response seperti ini :</p>



<pre class="wp-block-code"><code>{
"message": "Please provide token",
"status_code": 403
}</code></pre>



<p>Jadi mekanisme nya adalah, kalian harus mengambil JWT TOKEN ke service Authentication yang telah kita buat sebelumnya, kemudian Ambil token tersebut dan kirimkan bersamaan dengan request untuk melakukan seeder. (Pastikan JWT_SECRET nya sama ya).</p>



<p>Jika ada kendala jangan sungkan untuk tanya ke admin lewat sosial media yang ada diatas. Tutorial ini disimpan di Repository github saya, kalian bisa buka disini : <a href="https://github.com/tarikhagustia/microservice_example">https://github.com/tarikhagustia/microservice_example</a></p>



<p>Sekian dan terimakasih, Wassalamu&#8217;alaikum Wr. Wb.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Membangun Microservices sederhana dengan PHP, NodeJS dan Docker – Bagian 2 (Authentication Service)</title>
		<link>https://tarikhagustia.id/membangun-microservices-sederhana-dengan-php-nodejs-dan-docker-bagian-2-authentication-service/</link>
		
		<dc:creator><![CDATA[Tarikh Agustia]]></dc:creator>
		<pubDate>Fri, 13 Dec 2019 08:29:20 +0000</pubDate>
				<category><![CDATA[Microservices]]></category>
		<category><![CDATA[microservices]]></category>
		<guid isPermaLink="false">https://tarikhagustia.id/?p=144</guid>

					<description><![CDATA[Assalamu&#8217;alaikum Wr. Wb Pada artikel kali ini saya akan melanjutkan materi tentang Membangun Microservices sederhana dengan PHP, NodeJS dan Docker. Pada bagian ini saya akan menjelaskan tentang pembuatan Authentication Service, oh iya sebelum ke materi FYI ya buat temen &#8211;...]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image"><img loading="lazy" width="1024" height="576" src="https://tarikhagustia.id/wp-content/uploads/2019/12/Membangun-Microservice-Sederhana-dengan-PHP-NodeJS-dan-Docker-1024x576.png" alt="Membangun Microservice Sederhana dengan PHP NodeJS dan Docker" class="wp-image-126" srcset="https://tarikhagustia.id/wp-content/uploads/2019/12/Membangun-Microservice-Sederhana-dengan-PHP-NodeJS-dan-Docker-1024x576.png 1024w, https://tarikhagustia.id/wp-content/uploads/2019/12/Membangun-Microservice-Sederhana-dengan-PHP-NodeJS-dan-Docker-300x169.png 300w, https://tarikhagustia.id/wp-content/uploads/2019/12/Membangun-Microservice-Sederhana-dengan-PHP-NodeJS-dan-Docker-768x432.png 768w, https://tarikhagustia.id/wp-content/uploads/2019/12/Membangun-Microservice-Sederhana-dengan-PHP-NodeJS-dan-Docker.png 1280w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>Assalamu&#8217;alaikum Wr. Wb Pada artikel kali ini saya akan melanjutkan materi tentang Membangun Microservices sederhana dengan PHP, NodeJS dan Docker. Pada bagian ini saya akan menjelaskan tentang pembuatan Authentication Service, oh iya sebelum ke materi <strong>FYI </strong> ya buat temen &#8211; temen bahwa domain blog saya telah di ubah dari blog.tarikhagustia.id ke tarikhagustia.id karena sesuatu dan lain hal.</p>



<p>Pada artikel <a href="https://tarikhagustia.id/membangun-microservices-sederhana-dengan-php-nodejs-dan-docker-bagian-1/">bagian pertama</a>, kita sudah membahas tentang arsitektur yang akan kita buat. Nah pada bagian ini admin akan membuat Authentication Service menggunakan PHP dengan Framework lumen. Mungkin ada temen &#8211; temen yang bertanya, &#8220;Bang kok pake PHP? kenapa ga pake golang atau semacamnya? kan lebih cocok.&#8221; ya karena saya sendiri belum bisa golang hehe <img src="https://s.w.org/images/core/emoji/13.0.1/72x72/1f641.png" alt="🙁" class="wp-smiley" style="height: 1em; max-height: 1em;" /> . Disini saya mencoba untuk memperlihatkan keberagaman dalam pembuatan microservice. Untuk Framework, temen &#8211; temen bebas memilih apa saja kebetulan saya pake Lumen karena saya sendiri sudah terbiasa dengan Laravel.</p>



<p>Tapi ni tapi&#8230; memakai PHP sebagai microservices bukanlah hal yang jelek, karena performance dari PHP sendiri mangkin kesini mangkin &#8220;Ngacir&#8221;.</p>



<h3>Installasi Lumen</h3>



<p>Disini saya ga bakal ngajarain hal &#8211; hal basic, jadi saya anggap temen &#8211; temen sudah bisa dalam melakukan installasi untuk Lumen Framework, kalo temen &#8211; temen ga tau cara install nya, cek official dokumentasi nya.</p>



<p>jadi pada pembuatan microservices ini saya akan membuat struktur folder seperti ini : </p>



<pre class="wp-block-code"><code>~/Documents/code/microservices/
- authentication
- products</code></pre>



<p>untuk lokasi nya disesuaikan ya di lokasi komputer temen &#8211; temen, kebetulan saat membuat artikel ini saya pake Mac (Sombong amat &#8230;).</p>



<p>Oke, kemudian untuk menginstall lumen di dalam folder microservices, run command berikut :</p>



<pre class="wp-block-code"><code>composer create-project --prefer-dist laravel/lumen authentication</code></pre>



<p>Seteleh terinstall pastikan temen &#8211; temen melakukan konfigurasi dasar, untuk konfigurasi dasar temen &#8211; temen bisa lihat di offical dokumentasi nya. Setelah terkonfigurasi dengan baik silahkan temen &#8211; temen buka project nya dengan Text Editor / IDE yang disukai, saat ini saya pakai PHPStrom sebagai IDE nya.</p>



<p>Selanjutnya dalam pembuatan service ini kita akan memakai packages <a href="https://github.com/tymondesigns/jwt-auth">https://github.com/tymondesigns/jwt-auth</a> untuk melakukan generator token JWT, tambahkan package tersebut pada composer.json</p>



<pre class="wp-block-code"><code>...
"tymon/jwt-auth": "^1.0",
...</code></pre>



<p>Pakai yang versi 1 keatas ya biar upto date gituloh, Kemudian jalankan composer update, untuk installasi lengkapnya silahkan baca dokumentasi lengkapnya di <a href="https://jwt-auth.readthedocs.io/en/develop/lumen-installation/">https://jwt-auth.readthedocs.io/en/develop/lumen-installation/</a> </p>



<p>Jangan lupa dibaca juga ya quick start nya <a href="https://jwt-auth.readthedocs.io/en/develop/quick-start/">https://jwt-auth.readthedocs.io/en/develop/quick-start/</a> </p>



<p>Kemudian pastikan lumen framework nya berjalan dengan sempurna dengan menjalankan perintah</p>



<pre class="wp-block-code"><code>php -S localhost:8000 -t public</code></pre>



<p>Jika tidak ada error, maka lumen framework akan berjalan pada port 8000 dan akan memberikan response : Lumen (6.2.0) (Laravel Components ^6.0), jika tidak temen &#8211; temen bisa debugging sendiri, itung &#8211; itung latihan hehe ;).</p>



<p></p>



<h3>Membuat End Point</h3>



<p>Dalam pembuatan API pasti kita tidak asing lagi dengan kata End Point, kali ini kita akan membuat 2 endpoin yaitu :</p>



<ol><li>/auth/token (Memberikan response token)</li><li>/auth/me (Memberikan informasi user yang telah login)</li></ol>



<p>Pertama kita harus membuat controller, jika temen &#8211; temen mengikuti tutorial dari <a href="https://jwt-auth.readthedocs.io/en/develop/quick-start/">https://jwt-auth.readthedocs.io/en/develop/quick-start/</a> maka temen &#8211; temen tinggal ikuti saja. Mari kita buat AuthController.php (Karena dilumen ga bisa generate controller) jadi kita mesti buat secara manual.</p>



<pre class="wp-block-code"><code>&lt;?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use App\Http\Controllers\Controller;

class AuthController extends Controller
{
    /**
     * Create a new AuthController instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('auth:api', ['except' => ['login']]);
    }

    /**
     * Get a JWT via given credentials.
     *
     * @param Request $request
     * @return \Illuminate\Http\JsonResponse
     */
    public function login(Request $request)
    {
        $credentials = $request->only(['email', 'password']);

        if (! $token = Auth::attempt($credentials)) {
            return response()->json(['error' => 'Unauthorized'], 401);
        }

        return $this->respondWithToken($token);
    }

    /**
     * Get the authenticated User.
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function me()
    {
        return response()->json(Auth::user());
    }

    /**
     * Log the user out (Invalidate the token).
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function logout()
    {
        Auth::logout();

        return response()->json(['message' => 'Successfully logged out']);
    }

    /**
     * Get the token array structure.
     *
     * @param  string $token
     *
     * @return \Illuminate\Http\JsonResponse
     */
    protected function respondWithToken($token)
    {
        return response()->json([
            'access_token' => $token,
            'token_type' => 'bearer',
            'expires_in' => Auth::factory()->getTTL() * 60
        ]);
    }
}
</code></pre>



<p>Kemudian selanjutnya mari kita buat routes nya, edit file web.php dan tambahkan script berikut :</p>



<pre class="wp-block-code"><code>&lt;?php


$router->get('/', function () use ($router) {
    return $router->app->version();
});

$router->post('/token', 'AuthController@login');
$router->get('/me', 'AuthController@me');
</code></pre>



<p>disini kita tidak akan menggunakan prefix /auth, karena nantinya prefix auth akan dihanle oleh Nginx Proxy, jadi nanti semua request yang mempunyai prefix /auth akan diarahkan ke service ini.</p>



<p>Kemudian cobalah untuk mencoba melakukan hit kepada end point /me, temen &#8211; temen bisa pakai postman atau browser, kalo saya biasanya pakai postman. Maka seharusnya temen &#8211; temen akan mendapatkan respose seperti ini :</p>



<pre class="wp-block-code"><code>Unauthorized.</code></pre>



<p>Hal ini dikarenakan kita harus melakukan authentikasi terlebih dahulu sebelum mengakses endpoint /me.</p>



<p>Nah untuk mempermudah aplikasi yang menjadi Front End API kita nanti maka response error yang akan kita berikan diusahaakan seragam dan dapat dimengerti, kali ini kita akan membuat respose nya menjadi json. Untuk merubah Error Unauthorized Response, edit file app/Http/Middleware/Authenticate.php menjadi</p>



<pre class="wp-block-code"><code>&lt;?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Contracts\Auth\Factory as Auth;

class Authenticate
{
    /**
     * The authentication guard factory instance.
     *
     * @var \Illuminate\Contracts\Auth\Factory
     */
    protected $auth;

    /**
     * Create a new middleware instance.
     *
     * @param  \Illuminate\Contracts\Auth\Factory  $auth
     * @return void
     */
    public function __construct(Auth $auth)
    {
        $this->auth = $auth;
    }

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string|null  $guard
     * @return mixed
     */
    public function handle($request, Closure $next, $guard = null)
    {
        if ($this->auth->guard($guard)->guest()) {
            return response()->json([
                'status_code' => 401,
                'message' => 'Unauthorized'
            ], 401);
        }

        return $next($request);
    }
}
</code></pre>



<p>Setelah disave, kemudian kita Hit lagi endpoint /me, seharusnya menampilkan pesan error berikut :</p>



<pre class="wp-block-code"><code>{
    "status_code": 401,
    "message": "Unauthorized"
}</code></pre>



<p>Untuk melakukan pengujian pada end point /token, tentunya kita perlu data contoh, buatlah seeder untuk menambah tabel user, kemudian lakukan migrate, untuk file migration dan seeder nya lihat script berikut :</p>



<pre class="wp-block-code"><code>// Migration
&lt;?php

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

class UserTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->string('password');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('users');
    }
}
</code></pre>



<pre class="wp-block-code"><code>// Seeder
&lt;?php

use App\User;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\Hash;

class UserTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $user = new User;
        $user->name = "Fulan";
        $user->email = 'email@email.com';
        $user->password = Hash::make('email@email.com');
        $user->save();
    }
}
</code></pre>



<p>setelah terbentuk 1 data didalam database, kemudian kita harus manambahkan config ke auth.php, dikarenakan lumen ini config nya tidak di expose, maka kita harus mengcopy dari file vendor ke config/auth.php, copy script berikut :</p>



<pre class="wp-block-code"><code>&lt;?php

use App\User;

return [

    /*
    |--------------------------------------------------------------------------
    | Authentication Defaults
    |--------------------------------------------------------------------------
    |
    | This option controls the default authentication "guard" and password
    | reset options for your application. You may change these defaults
    | as required, but they're a perfect start for most applications.
    |
    */
    'defaults' => [
        'guard' => 'api',
        'passwords' => 'users',
    ],


    /*
    |--------------------------------------------------------------------------
    | Authentication Guards
    |--------------------------------------------------------------------------
    |
    | Next, you may define every authentication guard for your application.
    | Of course, a great default configuration has been defined for you
    | here which uses session storage and the Eloquent user provider.
    |
    | All authentication drivers have a user provider. This defines how the
    | users are actually retrieved out of your database or other storage
    | mechanisms used by this application to persist your user's data.
    |
    | Supported: "session", "token"
    |
    */
    'guards' => [
        'api' => [
            'driver' => 'jwt',
            'provider' => 'users',
        ],
    ],

    // optional, if use eloquent
    'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => User::class,
        ]
    ],
];
</code></pre>



<p>Kemudian coba test dengan postman untuk end point /token, dengan username dan password sesuai seeder diatas, jika berhasil response nya akan seperti ini :</p>



<pre class="wp-block-code"><code>{
    "access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJodHRwOlwvXC9sb2NhbGhvc3Q6ODAwMFwvdG9rZW4iLCJpYXQiOjE1NzYyMjU0ODMsImV4cCI6MTU3NjIyOTA4MywibmJmIjoxNTc2MjI1NDgzLCJqdGkiOiJnYkJqNEJYYnI2a2J4NGZ5Iiwic3ViIjoxLCJwcnYiOiI4N2UwYWYxZWY5ZmQxNTgxMmZkZWM5NzE1M2ExNGUwYjA0NzU0NmFhIn0.O2C6Vf88QHgk87jKFIvwSbQr-_DGOgeAhMMmg0_DdAg",
    "token_type": "bearer",
    "expires_in": 3600
}</code></pre>



<p>Mungkin begitu saja materi kali ini, jika ada yang kurang jelas bisa PM admin, mohon maaf jika masih banyak kekurangan.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Membangun Microservices sederhana dengan PHP, NodeJS dan Docker &#8211; Bagian 1</title>
		<link>https://tarikhagustia.id/membangun-microservices-sederhana-dengan-php-nodejs-dan-docker-bagian-1/</link>
		
		<dc:creator><![CDATA[Tarikh Agustia]]></dc:creator>
		<pubDate>Mon, 09 Dec 2019 01:40:28 +0000</pubDate>
				<category><![CDATA[Microservices]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[microservices]]></category>
		<category><![CDATA[NodeJS]]></category>
		<category><![CDATA[php]]></category>
		<guid isPermaLink="false">https://blog.tarikhagustia.id/?p=124</guid>

					<description><![CDATA[Assalamu&#8217;alaikum Wr. Wb, pada kesempatan kali ini saya akan membagikan pengalaman pribadi saya dalam mempelajari Software Architecture khususnya dalam bidang Microservice. Dalam Materi kali ini akan terbagi menjadi beberapa bagian (atau part) yang akan diupdate setiap minggu nya, so jangan...]]></description>
										<content:encoded><![CDATA[
<figure class="wp-block-image"><img loading="lazy" width="1280" height="720" src="https://blog.tarikhagustia.id/wp-content/uploads/2019/12/Membangun-Microservice-Sederhana-dengan-PHP-NodeJS-dan-Docker.png" alt="" class="wp-image-126" srcset="https://tarikhagustia.id/wp-content/uploads/2019/12/Membangun-Microservice-Sederhana-dengan-PHP-NodeJS-dan-Docker.png 1280w, https://tarikhagustia.id/wp-content/uploads/2019/12/Membangun-Microservice-Sederhana-dengan-PHP-NodeJS-dan-Docker-300x169.png 300w, https://tarikhagustia.id/wp-content/uploads/2019/12/Membangun-Microservice-Sederhana-dengan-PHP-NodeJS-dan-Docker-768x432.png 768w, https://tarikhagustia.id/wp-content/uploads/2019/12/Membangun-Microservice-Sederhana-dengan-PHP-NodeJS-dan-Docker-1024x576.png 1024w" sizes="(max-width: 1280px) 100vw, 1280px" /></figure>



<p>Assalamu&#8217;alaikum Wr. Wb, pada kesempatan kali ini saya akan membagikan pengalaman pribadi saya dalam mempelajari Software Architecture khususnya dalam bidang Microservice. Dalam Materi kali ini akan terbagi menjadi beberapa bagian (atau part) yang akan diupdate setiap minggu nya, so jangan sampai ketinggalan ya. :).</p>



<p>dalam materi kali ini kita akan fokus membahas tentang arsitektur yang akan kita buat nantinya, sebelum ke pembahasan lebih lanjut, mari kita lihat desain arsitektur yang akan kita buat nantinya.</p>



<ul class="wp-block-gallery columns-1 is-cropped"><li class="blocks-gallery-item"><figure><img loading="lazy" width="1024" height="576" src="https://blog.tarikhagustia.id/wp-content/uploads/2019/12/Desain-Arsitektur-1-1024x576.png" alt="" data-id="139" data-link="https://blog.tarikhagustia.id/membangun-microservices-sederhana-dengan-php-nodejs-dan-docker-bagian-1/desain-arsitektur-1/" class="wp-image-139" srcset="https://tarikhagustia.id/wp-content/uploads/2019/12/Desain-Arsitektur-1-1024x576.png 1024w, https://tarikhagustia.id/wp-content/uploads/2019/12/Desain-Arsitektur-1-300x169.png 300w, https://tarikhagustia.id/wp-content/uploads/2019/12/Desain-Arsitektur-1-768x432.png 768w, https://tarikhagustia.id/wp-content/uploads/2019/12/Desain-Arsitektur-1.png 1280w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure></li></ul>



<p>Pada desain diatas dapat kita lihat bahwa arsitektur yang akan kita buat adalah berupa API yang nantinya akan diakses oleh Aplikasi Mobile / Web Base yang ada pada device user. Berikut Penjelasan detailnya.</p>



<ol><li>Seperti yang kita lihat ada dua end point yang dapat diakses oleh user, yaitu end point /products dan auth/token</li><li>setiap end point akan dihandle oleh services yang berbeda</li><li>seperti yang teman &#8211; teman lihat bahwa kita harus menggunakan API gateway untuk melakukan distribusi kesetiap services nya, jadi user tidak diperbolehkan melakukan direct calling kesetiap service &#8211; service yang ada</li><li>Tiap &#8211; tiap service akan mempunyari Database yang berbeda &#8211; beda. kali ini saya akan menggunakan database MySQL dan MongoDB</li><li>untuk end point /products kita diharuskan melakukan authentikasi terlebih dahulu sebelum melakukan request ke end point ini, untuk mengatasi hal ini maka diperlukan token authentication, Kali ini admin pakai JWT sebagai format token nya.</li></ol>



<p>Nah, cukup jelas bukan ? kalo belum jelas bisa kontak admin via sosial media, Oh iya sebelum temen &#8211; temen baca materi ini, temen &#8211; temen diharuskan sudah mengerti tentang <strong>Konsep API dan Docker ya,</strong> dikarenakan kalo belum tau dijamin bingung.</p>



<p>Pada artikel mendatang admin akan membuat service nya menggunakan Lumen dan juga ExpressJS, (Bisa nya cuman itu hehe) yang insyallah akan dipublish minggu depan.</p>



<p>Terimakasih karena sudah meluangkan waktu untuk membaca tulisan yang amat banyak kurang nya ini, Wassalamu&#8217;alaikum Wr. WB</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/

Object Caching 0/93 objects using Memcached
Page Caching using Disk: Enhanced 
Lazy Loading (feed)
Database Caching using Redis (Request-wide modification query)

Served from: tarikhagustia.id @ 2024-10-24 18:08:42 by W3 Total Cache
-->