From b17a3c4ea715e7bee8ad30c937a4234c361d4a0e Mon Sep 17 00:00:00 2001 From: Michael Schoonmaker Date: Wed, 4 Sep 2013 16:14:50 -0700 Subject: [PATCH] Update model docs further. --- docs/concepts.md | 156 +++++++++++++++++++++++++---------------------- docs/intro.md | 13 ++-- 2 files changed, 89 insertions(+), 80 deletions(-) diff --git a/docs/concepts.md b/docs/concepts.md index c7a53fa6..3d10032a 100644 --- a/docs/concepts.md +++ b/docs/concepts.md @@ -1,135 +1,144 @@ -##Concepts +## Concepts -###What is LoopBack? +### Overview - - a component in the StrongLoop Suite - - a library of Node.js modules for connecting mobile apps to various data - sources - - a command line tool `slc lb` for generating applications and models - - a set of SDKs for native and web mobile clients +Before we go into all the wonderful concepts that make up LoopBack, let's first +answer a couple of questions: -###How it Works +> What _is_ LoopBack? -LoopBack apps are made up of three components: mobile clients, data sources, and -models. Clients, such as mobile or web apps, use LoopBack mobile SDKs to -interact with data sources, such as a database or REST API. Access to these -data sources is provided by models, which control how a data source is exposed -to a mobile client. + - A component in the [StrongLoop Suite](www.strongloop.com/strongloop-suite). + - A library of Node.js modules for connecting mobile apps to a variety of data + sources. + - A command line tool, `slc lb`, for generating models and entire applications + with the LoopBack library. + - A set of SDKs for native and web-based mobile clients. -Any mobile or web app can interact with a LoopBack data source through -the model API. The model API is available in Node.js, over REST, and as -native mobile SDKs for iOS, Android, and HTML5. Using the API, clients can query -databases, store data, upload files, send emails, create push notifications, -register users, and any other behavior provided by data sources. +> How does LoopBack work? + +LoopBack Applications are made up of three components: +[Data Sources](#data-sources-and-connectors) (also referred to as "Connectors"), +[Models](#models), and the [Mobile Clients](#mobile-clients) that consume them. + +Any mobile or web app can interact with a LoopBack Data Source through the Model +API. The Model API is available [locally within Node.js](#model), [remotely over +REST](#rest-api), and as native mobile SDKs for [iOS, Android, and +HTML5](#mobile-clients). Using the API, clients can query databases, store data, +upload files, send emails, create push notifications, register users, and any +other behavior provided by data sources. ### Mobile Clients **PLACEHOLDER FOR SDK INTRO** -###Models +### Models -**What is a Model?** +> What is a Model? -In LoopBack, a **Model** consists of the following. +In LoopBack, a Model consists of the following: - - application data - - business rules - - logic - - functions + - Application data + - Validation rules + - Business logic -A mobile client uses APIs provided by **Models** to request any information -needed to display a useful interface to the user. +A mobile client uses the remote API provided by Models to request any +information needed to display a useful interface to the user. -**A Simple Example** +#### A Simple Example -For example, an e-commerce app might have `Product` and `Inventory` models. -A mobile client could use the `Product` model API to search all the products in -a database. A client could join the `Product` and `Inventory` data to determine -what products are in-stock, or the `Product` model could provide a server-side -function (or [remote method](#remote-methods)) that returns this information. +For example, an e-commerce app might have `Product` and `Inventory` Models. +A mobile client could use the `Product` Model API to search through all of the +Procuts in a database. A client could join the `Product` and `Inventory` data to +determine what products are in stock, or the `Product` Model could provide a +server-side function (or [remote method](#remote-methods)) that aggregates this +information. ```js -var loopback = require('loopback'); -var Model = loopback.Model; +// Step 1: Create Models +var Model = require('loopback').Model; var Product = Model.extend('product'); var Inventory = Model.extend('customer'); ``` -> - Models are **schema-less** by default. -> - Some data sources, such as relational databases, require schemas. -> - Adding a schema allows you to sanitize data coming from mobile clients. +**NOTE:** Models are _schema-less_ by default, but some Connectors, such as +relational databases, _require_ schemas. Additionally, schemas are immensely +valuable for validating sanitizing data coming from mobile clients. See +[Sanitizing and Validating Models](#sanitizing-and-validating-models) if your +application needs to connect to an RDBMS, for example. -**Attaching Data Sources** +#### Attaching Data Sources -Attaching a model to a data source gives you access to the data source's API. -Using the MongoDB connector, this data source provides a `create` method. This -example uses the `create` method to store a new product. +Attaching a Model to a Data Source gives you access to a powerful API mixed into +Models by their Sources. The [MongoDB Connector](#), for example, mixes in a +`create` method that allows us to store a new Product in the database: ```js +// Step 2: Attach Data Sources var db = loopback.createDataSource({ connector: require('loopback-connector-mongodb') }); -// enables the model to use -// the mongodb api +// Enables the Model to use the MongoDB API Product.attachTo(db); -// create a new product in the database -Product.create({name: 'widget', price: 99.99}, function(err, widget) { - console.log(widget.id); // the product's id +// Create a new product in the database +Product.create({ name: 'widget', price: 99.99 }, function(err, widget) { + console.log(widget.id); // The product's id, added by MongoDB }); ``` -**Exposing to Mobile Clients** +#### Exposing to Mobile Clients Models can be exposed to mobile clients using one of the remoting middlewares. -This example uses the `app.rest` middleware to expose the `Product` model's API +This example uses the `app.rest` middleware to expose the `Product` Model's API over REST. ```js -// create a loopback app +// Step 3: Create a LoopBack Application var app = loopback(); -// use the REST remoting middleware +// Use the REST remoting middleware app.use(loopback.rest()); -// expose the `Product` model +// Expose the `Product` model app.model(Product); ``` -**Sanitizing and Validating Models** +#### Sanitizing and Validating Models -Once a schema is added to a model, it will validate and sanitize data before -giving it to a data source. For example, the `Product` model has a schema that -will not change. The example below updates the `Product` model with a schema -written in **LoopBack Definition Language**, a well documented flavor of JSON. +Once a schema is added to a Model, it will validate and sanitize data before +giving it to a Data Source. For example, the `Product` Model has a schema that +will not change. The example below updates the `Product` Model with a schema +written in **LoopBack Definition Language**, a well-documented flavor of JSON. ```js +// Step 4: Add a Schema var productSchema = { - "name": {"type": "string", "required": true}, + "name": { "type": "string", "required": true }, "price": "number" }; var Product = Model.extend('product', productSchema); ``` -If a remote client tries to save a product with extra properties, they will be -removed. The model will only be saved if the product contains the required -`name` property. +On one hand, If a remote client tries to save a product with extra properties +(e.g. `description`), those properties will be removed before saving the Model. +On the other hand, the Model will _only_ be saved if the product contains the +required `name` property. -**Learn more about models** +#### More About Models -- Check out the model [REST API](#rest-api) +- Check out the Model [REST API](#rest-api). - Read the [LoopBack Definition Language Guide](http://docs.strongloop.com/loopback-datasource-juggler#loopback-definition-language-guide). - Browse the [Node.js Model API](#model). -- Before you build your own, check out the [bundled models](#bundled-models). +- Before you build your own, check out the [bundled Models](#bundled-models). - Expose custom behavior to clients using [remote methods](#remote-methods). -- See how to [define relationships](#relationships) between models. +- See how to [define relationships](#relationships) between Models. -###Datasources and Connectors +### Data Sources and Connectors -LoopBack allows you to connect to many sources of data and services in the cloud -and on premise in your data center. These sources of data and services are +LoopBack allows you to connect to many sources of data and services both in the +cloud and on-premise in your data center. These sources of data and services are called DataSources. DataSources are accessed through a plugin called a Connector in LoopBack. Plugins are highly customizable and extensible. Unlike other mobile backend, LoopBack can leverage your existing data and organize them in @@ -146,7 +155,7 @@ using database drivers or other client APIs. In general, connectors are not used directly by application code. The DataSource class provides APIs to configure the underlying connector and exposes functions via DataSource or model classes. -**LoopBack Connector Modules** +#### LoopBack Connector Modules | Type | Package Name | | --------- | -------------------------------------------------------------------------------------- | @@ -155,16 +164,15 @@ the underlying connector and exposes functions via DataSource or model classes. | Oracle | [loopback-connector-oracle](https://github.com/strongloop/loopback-connector-oracle) | | REST | [loopback-connector-rest](https://github.com/strongloop/loopback-connector-rest) | -For more information, please read [LoopBack DataSource and Connector Guide](/loopback-datasource-juggler/#loopback-datasource-and-connector-guide). +For more information, please read the [LoopBack DataSource and Connector Guide](/loopback-datasource-juggler/#loopback-datasource-and-connector-guide). ### REST -Everything defined in LoopBack is available to you as a REST endpoint. For -every model that is created in LoopBack, a REST endpoint is automatically -created for you. You can see and experiment with your REST api using the +Everything defined in LoopBack (e.g. Models) can be made available as a REST +endpoint. You can see and experiment with _your_ REST api using the [LoopBack API Explorer](http://localhost:3000/explorer/). -LoopBack also supports other protocols for your API as well. Socket.io is +LoopBack also supports other protocols for your API as well. Socket.io is another protocol that is currently being developed. For more information, please read [Model REST APIs](#model-rest-api). diff --git a/docs/intro.md b/docs/intro.md index fe194c95..42a1dee6 100644 --- a/docs/intro.md +++ b/docs/intro.md @@ -1,14 +1,15 @@ -#LoopBack +# LoopBack **v1.0.0** -LoopBack is part of the [StrongLoop Suite](www.strongloop.com/strongloop-suite) +LoopBack is part of the [StrongLoop Suite](www.strongloop.com/strongloop-suite). LoopBack is a mobile backend framework that puts you in control. As a mobile developer you decide where to run your mobile backend - in -the cloud or on permise. -LoopBack is built on [StrongNode](/strongnode) and open source Node. -js modules. It leverages the power of Node, the community that -stands behind Node, and the support that [StrongLoop](www.strongloop.com) offers. +the cloud or on-premise. +LoopBack is built on [StrongNode](/strongnode) and open source Node.js +modules. It leverages the power of Node, the community that +stands behind Node, and the support that [StrongLoop](www.strongloop.com) +offers. LoopBack is here to help you develop mobile applications with rich functionality and data that is in your datacenter and the cloud.