Skip to content

jacky-htg/api-news

Repository files navigation

README

The News API using GO Language, MySql and redis

Fitur :

  • RBAC (Role Based Access Control)
  • Catching news list using redis
  • Auto resize image and auto create thumbnail image
  • Storage image to AWS S3
  • Security
  • Api documentation using swagger
  • Unit Testing and Rest api testing
  • Queue Messaging using redis, every new publish news will be push to queue messaging
  • Websocket to broadcast new publish news

What is this repository for?

  • API for News
  • 1.0
  • [Learn Markdown]

RBAC

There is 2 (two) role, Editor and Writer. Editor can access all api. Writer only can create new news and edit own news. Guest can read topics and read news.

Guest :

  • GET /news
  • GET /news/{id}
  • GET /topics
  • GET /topics/{id}

Writer :

  • POST /news
  • PUT /news/{id} (but only the news he wrote himself)

Editor :

  • POST /news
  • PUT /news/{id}
  • PUT /news/{id}/publish
  • DELETE /news/{id}
  • POST /topics
  • PUT /topics/{id}
  • DELETE /topics/{id}

Web Socket

Websocket is used to broadcast new publish news. WebSocket address is : ws://localhost:8080/newssocket. Here is sample script on client when consum a websocket. Create a file client.html on your document root and open it using your favorite browser : http://localhost/client.html

<script>
var ws = new WebSocket("ws://localhost:8080/newssocket");

ws.onopen = function() {
  ws.send("hello server!")
}

ws.onmessage = function(event) {
  var m = event.data;
  if (m === "pong") console.debug("Received message", m);
  else notifyMe(m);
}

ws.onerror = function(event) {
  console.debug(event)
}

function notifyMe(message) {
  // Let's check if the browser supports notifications
  if (!("Notification" in window)) {
    alert("This browser does not support system notifications");
  }

  // Let's check whether notification permissions have already been granted
  else if (Notification.permission === "granted") {
    // If it's okay let's create a notification
    var notification = new Notification(message);
  }

  // Otherwise, we need to ask the user for permission
  else if (Notification.permission !== 'denied') {
    Notification.requestPermission(function (permission) {
      // If the user accepts, let's create a notification
      if (permission === "granted") {
        var notification = new Notification(message);
      }
    });
  }

  // Finally, if the user has denied notifications and you 
  // want to be respectful there is no need to bother them any more.
}
</script>

Demo

for demo documentation, see https://api-news.rijalasepnugroho.com/documentation/

Api Key : n3WsAp1D3v

Editor : email (editor@gmail.com) password (1234)

Writer : email (writer@gmail.com) password (1234)

How do I get set up?

This API using Golang. Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.

to install go, https://golang.org/doc/install

Dependencies :

  • go get github.com/spf13/viper
  • go get github.com/gorilla/handlers
  • go get github.com/gorilla/mux
  • go get golang.org/x/crypto/bcrypt
  • go get github.com/dgrijalva/jwt-go
  • go get github.com/go-sql-driver/mysql
  • go get github.com/aws/aws-sdk-go
  • go get github.com/gosimple/slug
  • go get gopkg.in/redis.v5
  • go get github.com/gorilla/websocket
  • go get github.com/nfnt/resize
  • go get github.com/adjust/rmq

File Configuration on ./config/config.json

You can run application with going the directory api-news and command : go run main.go

You can test the api using command : go test -v

For api documentation, you can open on the browser: http://localhost:8080/documentation/

About

api for news system. Develop using golang, mysql and redis.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published