mirror of
https://github.com/strapi/strapi.git
synced 2025-07-13 20:11:47 +00:00
203 lines
7.1 KiB
Markdown
203 lines
7.1 KiB
Markdown
![]() |
# Introduction
|
||
|
|
||
|
-----
|
||
|
Important Note: **Strapi 1.x is on maintenance only**. Development focuses on the upcoming Strapi 3.0.
|
||
|
|
||
|
-----
|
||
|
|
||
|
Strapi is an open-source Node.js rich framework for building applications and services.
|
||
|
|
||
|
Strapi enables developers to focus on writing reusable application logic instead of spending time
|
||
|
building infrastructure. It is designed for building practical, production-ready Node.js applications
|
||
|
in a matter of hours instead of weeks.
|
||
|
|
||
|
The framework sits on top of [Koa](http://koajs.com/). Its ensemble of small modules work
|
||
|
together to provide simplicity, maintainability, and structural conventions to Node.js applications.
|
||
|
|
||
|
## Getting Started
|
||
|
|
||
|
### Installation
|
||
|
|
||
|
Install the latest stable release with the npm command-line tool:
|
||
|
|
||
|
```bash
|
||
|
$ npm install strapi -g
|
||
|
```
|
||
|
|
||
|
|
||
|
### Create your first project
|
||
|
|
||
|
You now are able to use the Strapi CLI. Simply create your first application and start the server:
|
||
|
|
||
|
```bash
|
||
|
$ strapi new <appName>
|
||
|
$ cd <appName>
|
||
|
$ strapi start
|
||
|
```
|
||
|
|
||
|
The default home page is accessible at [http://localhost:1337/](http://localhost:1337/).
|
||
|
|
||
|
### Create your first API
|
||
|
|
||
|
```bash
|
||
|
$ strapi generate api <apiName>
|
||
|
```
|
||
|
|
||
|
For example, you can create a `car` API with a name (`name`), year (`year`) and
|
||
|
the license plate (`license`) with:
|
||
|
|
||
|
```bash
|
||
|
$ strapi generate api car name:string year:integer license:string
|
||
|
```
|
||
|
## Alternatives
|
||
|
|
||
|
### Dry Application
|
||
|
|
||
|
Note that you can generate a dry application using the `dry` option:
|
||
|
|
||
|
```bash
|
||
|
$ strapi new <appName> --dry
|
||
|
```
|
||
|
|
||
|
This will generate a Strapi application without:
|
||
|
|
||
|
- the built-in `user`, `email` and `upload` APIs,
|
||
|
- the `grant` hook,
|
||
|
- the open-source admin panel,
|
||
|
- the Waterline ORM (`waterline` and `blueprints` hooks disabled),
|
||
|
- the Strapi Studio connection (`studio` hook disabled).
|
||
|
|
||
|
This feature allows you to only use Strapi for your HTTP server structure if you want to.
|
||
|
|
||
|
### Create an API via the Strapi Studio
|
||
|
|
||
|
The Strapi Studio allows you to easily build and manage your application environment
|
||
|
thanks to a powerful User Interface.
|
||
|
|
||
|
Log into the Strapi Studio with your user account ([http://studio.strapi.io](http://studio.strapi.io))
|
||
|
and follow the instructions to start the experience.
|
||
|
|
||
|
|
||
|
### Link to the Strapi Studio
|
||
|
|
||
|
> We advise you to use our Studio to build APIs. To do so, you need to create a Strapi account.
|
||
|
[Go to the Strapi Studio to signup](http://studio.strapi.io).
|
||
|
Studio is dedicated to developers to build applications without writing
|
||
|
any single line of code thanks to its powerful set of tools.
|
||
|
|
||
|
After creating an account on the Strapi Studio, you are able to link your machine to your
|
||
|
Strapi Studio account to get access to all features offered by the Strapi ecosystem.
|
||
|
Use your Strapi account credentials.
|
||
|
|
||
|
```bash
|
||
|
$ strapi login
|
||
|
```
|
||
|
|
||
|
## Key-features
|
||
|
|
||
|
### 100% JavaScript
|
||
|
|
||
|
Building on top of Strapi means your application is written entirely in JavaScript,
|
||
|
the language you and your team are already using in the browser.
|
||
|
|
||
|
Since you spend less time context-shifting, you're able to write code in a more consistent style,
|
||
|
which makes development more productive.
|
||
|
|
||
|
The entire Strapi framework is written in ES2015.
|
||
|
|
||
|
### Getting started quickly
|
||
|
|
||
|
Strapi provides a robust layer for fundamental web applications to help you write your business
|
||
|
logic, without obscuring Node.js features that you know and love. Our goal is to make writing
|
||
|
business logic much easier than other frameworks.
|
||
|
|
||
|
### Auto-generate REST APIs
|
||
|
|
||
|
Strapi comes with a generator that help jumpstart your application's backend without writing any code. Just run:
|
||
|
|
||
|
```bash
|
||
|
$ strapi generate api car
|
||
|
```
|
||
|
and you'll get an API that lets you read, paginate, sort, filter, create, destroy, update,
|
||
|
and associate cars.
|
||
|
|
||
|
### Security
|
||
|
|
||
|
We take security very seriously. This is why Strapi comes with several security layers that just work
|
||
|
depending on your needs. Strapi provides configuration for CORS, CSRF, CSP, X-Frame-Options, XSS, HSTS,
|
||
|
HTTPS, SSL, proxy, IP filtering and ships reusable security policies.
|
||
|
|
||
|
No matter what you need to secure, Strapi is the right tool to make it right.
|
||
|
|
||
|
### Datastore-agnostic
|
||
|
|
||
|
Strapi comes installed with a powerful ORM/ODM called Waterline, a datastore-agnostic tool that
|
||
|
dramatically simplifies interaction with one or more databases.
|
||
|
|
||
|
It provides an abstraction layer on top of the underlying database, allowing you to easily query
|
||
|
and manipulate your data without writing vendor-specific integration code.
|
||
|
|
||
|
Strapi offers a new take on the familiar relational model, aimed at making data modeling more practical.
|
||
|
You can do all the same things you might be used to (one-to-many, many-to-many), but you can also assign
|
||
|
multiple named associations per-model. Better yet, you can assign different models to different databases,
|
||
|
and your associations/joins will still work, even across NoSQL and relational boundries.
|
||
|
|
||
|
Strapi has no problem implicitly/automatically joining a SQL table with a NoSQL collection and vice versa.
|
||
|
|
||
|
### Front-end agnostic
|
||
|
|
||
|
Strapi is compatible with any front-end strategy; whether it's Angular, Backbone, Ember,
|
||
|
iOS, Android, Windows Phone, or something else that hasn't been invented yet.
|
||
|
|
||
|
Plus it's easy to serve up the same API to be consumed by another web service or community of developers.
|
||
|
|
||
|
### Convention over configuration
|
||
|
|
||
|
Convention over configuration is a consistent approach makes developing applications more
|
||
|
predictable and efficient for everybody involved.
|
||
|
|
||
|
If anyone on your team has worked with frameworks, Strapi will feel pretty familiar.
|
||
|
Not only that, but they can look at a Strapi project and know, generally, how to code up the basic
|
||
|
patterns they've implemented over and over again in the past; whether their background.
|
||
|
What about your second application, or your third? Each time you create a new Strapi application,
|
||
|
you start with a sane, familiar boilerplate that makes you more productive.
|
||
|
|
||
|
Configuration files give you extra opportunities for human error.
|
||
|
|
||
|
In many cases, you'll even be able to recycle some of your code.
|
||
|
|
||
|
### Error Handling
|
||
|
|
||
|
By default outputs all errors to `stderr` unless `NODE_ENV` is `test`.
|
||
|
To perform custom error-handling logic such as centralized logging you can add an "error" event listener:
|
||
|
|
||
|
```js
|
||
|
strapi.app.on('error', function (err) {
|
||
|
strapi.log.error('server error', err);
|
||
|
});
|
||
|
```
|
||
|
|
||
|
If an error in the req/res cycle and it is not possible to respond to the client,
|
||
|
the `Context` instance is also passed:
|
||
|
|
||
|
```js
|
||
|
strapi.app.on('error', function (err, ctx) {
|
||
|
strapi.log.error('server error', err, ctx);
|
||
|
});
|
||
|
```
|
||
|
|
||
|
When an error occurs and it is still possible to respond to the client,
|
||
|
aka no data has been written to the socket, Strapi will respond appropriately with
|
||
|
a 500 "Internal Server Error". In either case an app-level "error" is emitted for logging purposes.
|
||
|
|
||
|
### Different environments
|
||
|
|
||
|
Strapi has built in support for the idea of having a different set of settings for each environment.
|
||
|
Real applications have this too, but often the framework around them doesn't accommodate it and
|
||
|
you end up having to swap configuration files in and out to achieve the same effect.
|
||
|
|
||
|
### Loose coupling
|
||
|
|
||
|
Strapi is flexible enough to allow you to explore and create when you have the time to but also
|
||
|
provides automation tools when you don't.
|