Developer's Diary

26 junio, 2013

[#Scala] Mis aventuras con Scala I

Desde hace tiempo he podido comenzar a ver este lenguaje que se encuentra en alza y ahora os contaré mis pequeñas andanzas con Scala.

Primera.

Como realmente lo que quiero hacer con esto es, crear Servicios dentro de la red. Vamos a intentar a comenzar duro y hacer un Hello World Rest API con su consiguiente consumo desde .Net. Let’s Go!

Ante todo quiero usar las tecnologías de TypeSafe así que me toca usar Play. Así que vamos allá.

Pues que mejor manera que comenzar buscando en google la friolera de “starting rest api in scala and play” localizando este genial artículo.

Vamos a comenzar instalando el Play Framework.

Para la instalación de Play, lo mejor es seguir este tutorial tranquilamente paso a paso.

Si seguimos correctamente tendremos nuestra primera aplicación creada, ahora solo queda que conectemos con nuestro IDE favorito para comenzar a desarrollar correctamente. Yo recomiendo Eclipse o IntelijIDEA.

Para configurar Eclipse con Scala solo es necesario descargarlo de aquí.

Para configurar JIDEA, deberemos descargar un plugin desde el mismo IDE, podeis comprobarlo desde aquí.

Después solo tenemos desde la consola de Play preparar nuestro nuevo proyecto para el IDE que hayamos usado y podremos comenzar a programar.

Cuando usamos Play, debemos tener un detalle importante y es el fichero de Routes. Este fichero nos permite organizar todas las peticiones que vayamos realizando.  Aquí un ejemplo de lo que estamos realizando

# Routes

# Routes
# This file defines all application routes (Higher priority routes first)
# ~~~~

# Home page
GET / controllers.Application.index
GET /:name controllers.Application.secondChoice(name: String)
GET / controllers.Application.thirdChoice

GET /second/ controllers.SecondApp.FirstTest
#GET /second/:name controllers.SecondApp.SecondTest(name : String)
GET /second/GetAge controllers.SecondApp.ThirdTest(name : String , age : Long)

Se trata de un fichero de texto plano. Como podeis ver la nomenclatura usada, es el tipo de verbo que vayamos a usar, por lo pronto GET, la ruta que se vaya a realizar y desde donde va a lanzar la lógica por un método. Tanto Application, creado por defecto, como SecondApp son objetos.

Scala hace diferencia entre Objetos y Clases de una manera distinta a la que podemos tener en cuenta desde lenguajes como C# o Java. Mientras que el objeto solo tendrá una instancia, es un singleton, las clases serán como actualmente las conocemos.

Por lo tanto es lógico que en este caso usemos un objeto para realizar las enrutaciones, ya que solo necesitamos una sola instancia.

Veamos un poco el código que hemos creado, en el objeto SecondApp:

package controllers

import play.api._
import play.api.mvc._
import play.api.mvc.Controller

import play.api.libs.json._

object SecondApp extends Controller {

def FirstTest = Action {
//val jsonObject = Json.obj("Welcome" -> JsString("Hola"))
val jsonObject = JsString("Hola")

Ok(jsonObject)
}

def SecondTest(name : String) = Action {
val jsonObject = JsString("Hola " + name)

Ok(jsonObject)
}

def ThirdTest(name : String , edad : Long) = Action {
val jsonObject = JsString("Hola " + name + " tu edad es: " + edad.toString())

Ok(jsonObject)

}
}

Vale ya tenemos nuestro servicio creado, ya tenemos los valores. Solo nos queda poder consumir estos valores desde Visual Studio. Así que vamos a nuestro último paso.

Vamos a crear una app de Windows Phone y probar que hemos obtenido.

Evidentemente consumir nuestro servicio es sencillo, debido a que simplemente debemos realizar una petición http a donde apunta nuestro Servidor de Play y tendremos nuestras consultas.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;

namespace ScalaSample
{
public class ScalaConsumption
{
public delegate void FinishRequest(object sender, string response);
public event FinishRequest OnFinishRequest;

public void FirstTest()
{
WebClient wc = new WebClient();
wc.DownloadStringAsync(new Uri("http://localhost:9000/second/"));

wc.DownloadStringCompleted += (s, e) =>
{
if (OnFinishRequest != null)
{
OnFinishRequest(this, e.Result);
}
};
}

public void ThirdTest(string name, long edad)
{
WebClient wc = new WebClient();

wc.DownloadStringAsync(new Uri("http://localhost:9000/second/GetAge?name=" + name + "&age=" + edad.ToString()));

wc.DownloadStringCompleted += (s, e) =>
{
if (OnFinishRequest != null)
{
OnFinishRequest(this, e.Result);
}
};
}

}
}

Hasta aquí mi primera aventura, en la siguiente comenzaré a intentar consumir algo de bases de datos no relacionales.

Un saludo y hasta la proxima.

Anuncios

Dejar un comentario »

Aún no hay comentarios.

RSS feed for comments on this post. TrackBack URI

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: