• Programmazione Android
  • CORSI ONLINE
  • Web Agency

Logo

Corsi di programmazione web e mobile online
Navigation
  • Home
  • CORSI ONLINE
  • Tutorial Pratici
  • GUIDE COMPLETE
    • Corso completo di C
    • Corso videogame con Cocos2d
    • Programmazione Cocoa Touch
  • Sezioni
    • Libri e manuali
    • Tips & Tricks
    • Risorse utili
    • Strumenti di Sviluppo
    • Materiale OpenSource
    • Framework
    • Guide Teoriche
    • Guide varie
    • Grafica e Design
    • iPad
    • News
    • Video Tutorial
    • Windows Phone
  • Pubblicità
  • About
    • Chi siamo
    • Pubblicazioni
    • Collabora
    • Sostieni devAPP

Realizzare il back end per la propria app con BaasBox

By IgnazioC | on 24 Ottobre 2014 | 3 Comments
Risorse utili

Alzi la mano chi non ha mai avuto a che fare con un back end… ora alzino la mano quelli che mangiano pane e API a colazione… bene potete entrambi continuare a leggere perché questo articolo è per entrambi.
Che stiate realizzando una calcolatrice per iOS, o stiate pianificando di fare concorrenza a SAP con un nuovo gestionale su iPad, prima o poi vi toccherà interfacciarvi con un back end, che sia per ricevere un banner, per salvare lo stato di un’operazione o per leggere l’elenco delle news. Se il backend non è già stato realizzato da qualcun’altro, le alternative sono due: o lo facciamo noi con le nostre manine oppure paghiamo qualcun altro per farlo.

Su devAPP ci sono due articoli (un po’ vecchi ma sempre attuali) su come realizzare un semplice backend usando php: parte 1 e parte 2. Non è un’operazione difficile, come potete vedere da questi due articoli, ma se vi serve qualcosa di più che una semplice lista di nomi e date di nascita, probabilmente vi toccherà assumere un professionista.

Esiste in realtà una terza strada, che sta prendendo piede da qualche anno, cioè quella di usare un BaaS, acronimo di Backend as a Service.

In pratica anziché realizzarvi da voi il vostro backend, ne “affittate” uno con le caratteristiche che vi servono, pagando (o non-pagando come vedremo più avanti) soltanto ciò che realmente vi serve.

Vi starete chiedendo come fa un servizio così generico ad adattarsi alle vostre esigenze, che sia quella di salvare la classifica del vostro ultimo clone-2048 oppure di memorizzare online l’elenco delle ricette da visualizzare nella vostra app. Senza entrare nei dettagli tecnici, questi servizi, invece di utilizzare un tradizionale database SQL (come ad esempio mySQL) utilizzano database NO-SQL nei quali è possibile memorizzare informazioni senza necessità di dichiarare lo schema a priori.

Il provider più famoso per questo tipo di servizi è sicuramente parse.com, acquistato un annetto fa direttamente da Facebook per la modica cifra di 85 milioni di dollari, che immagino stia investendo per aggiungere funzionalità alla propria piattaforma alla quale manca solo la possibilità di fare il caffè.

Ma non ho scritto tutta questa premessa per parlarvi di parse, che si facciano pubblicità da soli 🙂 vorrei invece parlare della sua alternativa free e OpenSource, che ha anche il vanto di essere Italiana: BaasBox.

BaasBox su github si autodefinisce come:

an Open Source project that aims to provide a general purpose back end for mobile and web apps

e un progetto che ha il termine “Open Source” nella propria definizione non può che ricevere la nostra attenzione.

Il vantaggio di installare un BaaS su un proprio server è innanzi tutto economico perché avrete accesso illimitato alla piattaforma con l’unica limitazione delle capacità del vostro server, ma non è da trascurare anche la possibilità di installare il BaaS direttamente sulla vostra macchina di sviluppo, così da non dipendere dalla connessione ad internet e poter pianificare anche alcuni complessi scenari di integrazione automatizzati.

Installazione e configurazione

L’installazione di BaasBox non richiede particolari competenze o risorse, il software infatti è basato su java, per cui è sufficiente avere un computer con una virtual machine java installata. Io ho eseguito l’installazione su un server Debian, seguendo le istruzioni disponibili a questo indirizzo: http://www.baasbox.com/installing-baasbox-on-linux/ ma se volete giusto provare potete tranquillmante eseguire BaasBox sul vostro mac, vi basta scaricare il file zip da questa pagina http://www.baasbox.com/download-page/

creare-un-backend-per-app-ios-android-baasbox-01

Una volta scaricato e scompattato il file zip, aprite un terminale posizionandovi nella cartella dove avete scaricato il file e digitate:

./start

Dopo una prima operazione di configurazione lo scrip si arresterà mostrando alcune incoraggianti informazioni:

creare-un-backend-per-app-ios-android-baasbox-02

La parte interessante è quel : “Listening for HTTP on /0………:9000“, che ci dice che il software è pronto e in ascolto sulla porta 9000 (porta di default). Verifichiamo.

Aprite il vostro browser e digitate:

locahost:9000

Tutto funziona e vi apparirà la pagina di login:

creare-un-backend-per-app-ios-android-baasbox-03

Entrate con le credenziali di default:

username: admin
password: admin
app code: 1234567890

Così da accedere alla console di amministrazione di BaasBox.

creare-un-backend-per-app-ios-android-baasbox-04

Dedicate un po’ di tempo ad esaminare le opzioni presenti nel menù di sinistra. Da segnalare tra i settings la possibilità di definire il template delle email da inviare all’utente, opzioni normalmente a pagamento con altri provider 😉
Anche la possibilità di caricare due differenti certificati per le nofiche push, produzione e sandbox è una funzione che difficilmente altri provider vi danno gratis.

Nella sezione “DB Management” avrete la possibilità di effettuare il backup e restore dei database, utile sia per sicurezza sia per verificare il comportamento dell’app con determinati tipi di dati. (Scenari tipo “cosa succede se ho un milione di commenti?”)

La parte dove verranno memorizzati i nostri dati è la parte di Collections e Documents. Nella terminologia No-SQL le Collections equivalgono più o meno alle tabelle, mentre i Documents equivalgono più o meno ai records. In pratica la vostra classe “Customer” sarà una Collections, tutte le istanze di quella classe diventeranno Documents.

Creiamo una nuova collection, cliccando sul tasto “New Collection” e creiamo la collection “Customer”.

creare-un-backend-per-app-ios-android-baasbox-05

Volendo potremmo anche caricare un nuovo customer direttamente dall’interfaccia web, cliccando semplicemente sulla sezione “Documents” e “New Document”, ma in questo caso saremmo costretti a fornire le informazioni sul customer direttamente in JSON, il che non è certo comodissimo.

creare-un-backend-per-app-ios-android-baasbox-06

Api REST e SDK iOS

Oltre che utilizzando la console di amministrazione, potete usare BaasBox con le API REST oppure utilizzando una libreria specifica, disponibile per iOS, Android e Javascript.
Le API rest non saranno trattate in questo articolo, trovate tutte le informazioni a questo indirizzo: http://www.baasbox.com/documentation/?shell#api

Applicazione iOS

Per realizzare un’applicazoine iOS la soluzione è più semplice è quella di utilizzare CocoaPods, basta infatti aggiungere questa dipendenza:

pod 'BaasBoxSDK', '0.8.3'

e procedere all’installazione con il classico `pod install` per generare un workspace già configurato. Maggiori informazioni su CocoaPods qui

La libreria va configurata nell’AppDelegate, per farlo aggiungiamo al metodo application:didFinishLaunchingWithOptions questa istruzione:

[BaasBox setBaseURL:@"http://localhost:9000" appCode:@"1234567890"];

ricordatevi di importare l’header della libreria:

#import <BaasBoxSDK/BaasBox.h>

Model

Un aspetto positivo di BaasBox è che non siete vincolati ad usare oggetti di un determinato tipo nella vostra applicazione, ma potete creare le vostre classi e aggiungere così tutte le property e la logica necessaria per la vostra app, mantenendo separata la logica di sincronizzazione.

Invece di lavorare con:

customer[@"name"] (parse)

potremo lavorare con

customer.name

mi sembra un bel vantaggio, no?

Per creare e ricevere oggetti di tipo Customer creiamo quindi la classe Customer subclass di BAAObject. Per ciascuna classe è necessario definire soltanto due metodi, il primo è collectionName con il quale possiamo fornire il nome ‘remoto’ della classe, in questo caso l’implementazione sarà questa:

- (NSString *)collectionName {
return @"document/Customer";
}

e l’altro metodo è initWithDictionary: il quale si occuperà semplicemente della conversione dei nomi delle property, se non avete nulla di particolare l’implementazione sarà simile a questa:

- (instancetype)initWithDictionary:(NSDictionary *)dictionary {
   self = [super initWithDictionary:dictionary];
   if (self) {
      _name = dictionary[@"name"];
      _surname = dictionary[@"surname"];
   }
   return self;
}

Anche se a prima vista può sembrare scomodo, implementare questo metodo offre una lunga serie di vantaggi: qualora i nomi delle property fossero diversi o se volessimo aggiungere della logica di validazione / conversione di formato.

Login

Per effettuare le operazioni di lettura/scrittura dovrete essere loggati su BaasBox, operazione che risulta molto semplice utilizzando l’sdk:

BAAClient *client = [BAAClient sharedClient];
[client authenticateUser:@"admin" password:@"admin" completion:^(BOOL success, NSError *error) {
//Inserite qui il vostro codice
}];

Ovviamente questo è solo un esempio che utilizza delle credenziali hardcoded, potete creare da voi il vostro viewController di login oppure utilizzare quello già fornito da BaasBox come esempio qui.

 

Ricevere e inviare gli oggetti al back end

Una volta loggati potrete utilizzare metodi di classe del vostro model per interrogare il back end e ricevere così gli oggetti richiesti. L’approccio utilizzato è quello di ActiveRecord quindi troveremo dei metodi asincroni come:

[Customer getObjectsWithCompletion:^(NSArray *objects, NSError *error) { } ];

il quale restituisce un’array di oggetti ti tipo Customer, quindi già convertiti nel tipo di riferimento.

Salvare un nuovo customer sul back end non potrebbe essere più semplice: create una normale istanza della classe Customer e invocate il metodo asincrono saveObjectWithCompletion: come in questo esempio:

Customer *newCustomer = [Customer new];
newCustomer.name = @"Mario";
newCustomer.surname = @"Rossi";
[newCustomer saveObjectWithCompletion:^(id object, NSError *error) {
//Esaminate l'errore per verificare che tutto sia andato a buon fine.
}];

Conclusioni

Ci sono molti aspetti di BaasBox che non abbiamo trattato in questo articolo, come le push notification, lo storage dei dati, le permission and so on and so forth, quindi non giudicate l’intera piattaforma soltanto in base a quello che avete letto qui.

Il mio personale giudizio su BaasBox è che se paragonata ad altre piattaforme commerciali sembra essere un po’ cruda ed essenziale, ma poiché quello che fa è sufficiente a coprire il 99% dei requisiti di un’applicazione classica e, soprattutto, stiamo parlando di un’applicazione totalmente Open Source, il mio giudizio non può che essere positivo, inoltre proprio il suo essere “essenziale” si traduce in una maggiore possibilità di customizzazione e, proprio poiché il progetto è Open Source, potete anche modificare (e studiare) l’sdk in modo che sia lui a piegarsi alle vostre esigenze e non il contrario.

Insomma, 10 e lode al progetto BaasBox!

Share this story:
  • tweet

Tags: baasbaasboxback end app iosbackend as a servicecreare backend per app iOS e androidGuide varieMateriale OpenSource

Recent Posts

  • Parte il percorso programmatori iOS in Swift su devACADEMY.it

    20 Dicembre 2017 - 0 Comment
  • Android, crittografare dati velocemente con Encryption

    24 Settembre 2018 - 0 Comment
  • Sql2o, accesso immediato ai database tramite Java

    3 Settembre 2018 - 0 Comment
  • Okio, libreria per ottimizzare l’input/output in Java

    27 Agosto 2018 - 0 Comment

Author Description

3 Responses to “Realizzare il back end per la propria app con BaasBox”

  1. 24 Ottobre 2014

    neronorx

    Grande ignazio

  2. 27 Ottobre 2014

    Carmine

    ciao Ignazio. Bell’articolo.

    Ti volevo chiedere: sullo stesso server (centos o comunque su base Linux) è possibile far girare più istanze di baasbox? Ad esempio, se ho già un server che mi gira un backend baasbox, posso inserirne un altro e farlo puntare ad una porta diversa?

    Non ci saranno problemi con db, jvm, etc?

  3. 27 Ottobre 2014

    IgnazioC

    Veramente non si saprei dare una risposta certa…così “a naso” direi che non dovrebbero esserci problemi perché di fatto baasbox non salva file in cartelle condivise, e non crea database sparsi nel sistema, tutto sta nella sua cartella.

Leave a Reply

Your email address will not be published. Required fields are marked *


*
*

Corso online di programmazione android e java

SEZIONI

  • Android
  • Comunicazioni
  • Contest
  • Corsi ed Eventi
  • Corso completo di C
  • Corso programmazione videogiochi
  • Framework
  • Grafica e Design
  • Guida rapida alla programmazione Cocoa Touch
  • Guide Teoriche
  • Guide varie
  • iPad
  • Le nostre applicazioni
  • Libri e manuali
  • Materiale OpenSource
  • News
  • Pillole di C++
  • Progetti completi
  • Risorse utili
  • Strumenti di Sviluppo
  • Swift
  • Tips & Tricks
  • Tutorial Pratici
  • Video Tutorial
  • Windows Phone

Siti Amici

  • Adrirobot
  • Allmobileworld
  • Apple Notizie
  • Apple Tribù
  • Avvocato360
  • Blog informatico 360°
  • bubi devs
  • fotogriPhone
  • GiovaTech
  • iApp-Mac
  • iOS Developer Program
  • iPodMania
  • MelaRumors
  • Meritocracy
  • SoloTablet
  • TecnoUser
  • Privacy & Cookie Policy
©2009-2018 devAPP - All Rights Reserved | Contattaci
devAPP.it è un progetto di DEVAPP S.R.L. - Web & Mobile Agency di Torino
Str. Volpiano, 54 - 10040 Leini (TO) - C.F. e P.IVA 11263180017 - REA TO1199665 - Cap. Soc. € 10.000,00 i.v.

devACADEMY.it

Vuoi imparare a programmare?

Iscriviti e accedi a TUTTI i corsi con un’unica iscrizione.
Oltre 70 corsi e migliaia di videolezioni online e in italiano a tua disposizione.

ISCRIVITI SUBITO