From 20198367dac3ae81cbbbaaba57590bd35f557f3e Mon Sep 17 00:00:00 2001 From: Joe Nelson Date: Mon, 19 Oct 2015 16:45:52 -0700 Subject: [PATCH] Documentation outline --- .gitignore | 1 + docs/CNAME | 1 + docs/admin/deployment.md | 9 + docs/admin/migration.md | 9 + docs/admin/performance.md | 9 + docs/admin/security.md | 21 +++ docs/admin/versioning.md | 9 + docs/api/reading.md | 29 +++ docs/api/writing.md | 13 ++ docs/examples/start.md | 346 ++++++++++++++++++++++++++++++++++++ docs/favicon.ico | Bin 0 -> 3134 bytes docs/img/logo.png | Bin 0 -> 36833 bytes docs/img/post-festivals.png | Bin 0 -> 55070 bytes docs/index.md | 68 +++++++ docs/install/ecosystem.md | 23 +++ docs/install/server.md | 70 ++++++++ mkdocs.yml | 24 +++ 17 files changed, 632 insertions(+) create mode 100644 docs/CNAME create mode 100644 docs/admin/deployment.md create mode 100644 docs/admin/migration.md create mode 100644 docs/admin/performance.md create mode 100644 docs/admin/security.md create mode 100644 docs/admin/versioning.md create mode 100644 docs/api/reading.md create mode 100644 docs/api/writing.md create mode 100644 docs/examples/start.md create mode 100644 docs/favicon.ico create mode 100644 docs/img/logo.png create mode 100644 docs/img/post-festivals.png create mode 100644 docs/index.md create mode 100644 docs/install/ecosystem.md create mode 100644 docs/install/server.md create mode 100644 mkdocs.yml diff --git a/.gitignore b/.gitignore index ef5079161..79b2122d4 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ codex.tags .anvil .stack-work tags +site diff --git a/docs/CNAME b/docs/CNAME new file mode 100644 index 000000000..7f2c5feb6 --- /dev/null +++ b/docs/CNAME @@ -0,0 +1 @@ +postgrest.com diff --git a/docs/admin/deployment.md b/docs/admin/deployment.md new file mode 100644 index 000000000..3f4821fe6 --- /dev/null +++ b/docs/admin/deployment.md @@ -0,0 +1,9 @@ +## Deployment + +### Heroku + +#### Getting Started + +#### Using Amazon RDS + +### Debian diff --git a/docs/admin/migration.md b/docs/admin/migration.md new file mode 100644 index 000000000..001b4b5c1 --- /dev/null +++ b/docs/admin/migration.md @@ -0,0 +1,9 @@ +## Data Migration + +### Sqitch + +### Test-Driven Migrations + +#### Structural Tests + +#### Value Tests with pgTAP diff --git a/docs/admin/performance.md b/docs/admin/performance.md new file mode 100644 index 000000000..f42d9cb1e --- /dev/null +++ b/docs/admin/performance.md @@ -0,0 +1,9 @@ +## Performance + +### Benchmarks + +### Caching + +### Quality of Service + +### Tips diff --git a/docs/admin/security.md b/docs/admin/security.md new file mode 100644 index 000000000..b4545b249 --- /dev/null +++ b/docs/admin/security.md @@ -0,0 +1,21 @@ +## Security + +### SSL + +### Database Roles + +### JSON Web Tokens + +#### Issuing via sql procedures + +### Row-Level Security + +#### Simulated - PostgreSQL <9.5 + +#### Real - PostgreSQL >=9.5 + +### Building Auth on top of JWT + +#### Basic Auth + +#### Github Sign-in diff --git a/docs/admin/versioning.md b/docs/admin/versioning.md new file mode 100644 index 000000000..ce31c7739 --- /dev/null +++ b/docs/admin/versioning.md @@ -0,0 +1,9 @@ +## API Versioning + +### Schema Search Path + +### Changing a Resource + +### Removing a Resource + +### Avoiding DB and Client Coupling diff --git a/docs/api/reading.md b/docs/api/reading.md new file mode 100644 index 000000000..ea26d2729 --- /dev/null +++ b/docs/api/reading.md @@ -0,0 +1,29 @@ +## Requesting Information + +### Tables and Views + +### Stored Procedures + +### Filtering + +#### Computed Columns + +#### Inside JSONB + +### Ordering + +### Limiting and Pagination + +#### Pagination by Limit-Offset + +#### Suppressing Counts + +### Embedding Foreign Keys + +### Response Format + +### Singular vs Plural + +### Data Schema + +### CORS diff --git a/docs/api/writing.md b/docs/api/writing.md new file mode 100644 index 000000000..ca14de60d --- /dev/null +++ b/docs/api/writing.md @@ -0,0 +1,13 @@ +## Updating Data + +### Record Creation + +### Bulk Insertion + +### Upsertion + +### Bulk Updates + +### Deletion + +### Protecting Dangerous Actions diff --git a/docs/examples/start.md b/docs/examples/start.md new file mode 100644 index 000000000..cd0da1f9b --- /dev/null +++ b/docs/examples/start.md @@ -0,0 +1,346 @@ +## Getting Started + +### Your First (simple) API + +Let's start with the simplest thing possible. We will expose some tables directly for reading and writing by anyone. + +Start by making a database + +```sh +createdb demo1 +``` + +We'll set it up with a film example (courtesy of [Jonathan Harrington](http://blog.jonharrington.org/postgrest-introduction/)). Copy the following into your clipboard: + +```sql +BEGIN; + +CREATE TABLE director +( + name text NOT NULL PRIMARY KEY +); + +CREATE TABLE film +( + id serial PRIMARY KEY, + title text NOT NULL, + year date NOT NULL, + director text, + rating real NOT NULL DEFAULT 0, + language text NOT NULL, + CONSTRAINT film_director_fkey FOREIGN KEY (director) + REFERENCES director (name) MATCH SIMPLE + ON UPDATE CASCADE ON DELETE CASCADE +); + +CREATE TABLE festival +( + name text NOT NULL PRIMARY KEY +); + +CREATE TABLE competition +( + id serial PRIMARY KEY, + name text NOT NULL, + festival text NOT NULL, + year date NOT NULL, + + CONSTRAINT comp_festival_fkey FOREIGN KEY (festival) + REFERENCES festival (name) MATCH SIMPLE + ON UPDATE CASCADE ON DELETE CASCADE +); + +CREATE TABLE film_nomination +( + id serial PRIMARY KEY, + competition integer NOT NULL, + film integer NOT NULL, + won boolean NOT NULL DEFAULT true, + + CONSTRAINT nomination_competition_fkey FOREIGN KEY (competition) + REFERENCES competition (id) MATCH SIMPLE + ON UPDATE NO ACTION ON DELETE NO ACTION, + CONSTRAINT nomination_film_fkey FOREIGN KEY (film) + REFERENCES film (id) MATCH SIMPLE + ON UPDATE CASCADE ON DELETE CASCADE +); + +COMMIT; +``` + +Apply it to your new database by running + +```sh +# On OS X +pbpaste | psql demo1 + +# Or Linux +# xclip -selection clipboard -o | psql demo1 +``` + +Start the PostgREST server and point it at the new database. + +```sh +postgrest -d demo1 -U postgres -a postgres --v1schema public +``` + +
+

Note about database users

+ +

If you installed PostgreSQL with Homebrew on Mac then the + database username may be your own login rather than + postgres.

+
+ +Let's use PostgREST to populate the database. Install a REST client such as [Postman](https://chrome.google.com/webstore/detail/postman/fhbjgbiflinjbdggehcddcbncdddomop?hl=en). Now let's insert some data as a bulk post in CSV format: + +```HTTP +POST http://localhost:3000/festival +Content-Type: text/csv + +name +Venice Film Festival +Cannes Film Festival +``` + +In Postman it will look like this + +![Festival bulk insert in postman](/img/post-festivals.png) + +Notice that the post type is `raw` and that `Content-Type: text/csv` set in the Headers tab. + +Note that the server returns a multipart response with URL of each created resource. + +```HTTP +Content-Type: application/json +Location: /festival?name=eq.Venice%20Film%20Festival + + +--postgrest_boundary +Content-Type: application/json +Location: /festival?name=eq.Cannes%20Film%20Festival +``` + +If you send a GET request to `/festival` it should return + +```json +[ + { + "name": "Venice Film Festival" + }, + { + "name": "Cannes Film Festival" + } +] +``` + +Now that you've seen how to do a bulk insert, let's do some more and fully populate the database. + +Post the following to `/competition`: + +```csv +name,festival,year +Golden Lion,Venice Film Festival,2014-01-01 +Palme d'Or,Cannes Film Festival,2014-01-01 +``` + +Now `/director`: + +```csv +name +Bertrand Bonello +Atom Egoyan +David Gordon Green +Andrey Konchalovskiy +Mario Martone +Mike Leigh +Roy Andersson +Saverio Costanzo +Alix Delaporte +Jean-Pierre Dardenne +Xiaoshuai Wang +Kaan Müjdeci +Tommy Lee Jones +Nuri Bilge Ceylan +Michel Hazanavicius +Xavier Dolan +Ramin Bahrani +Alice Rohrwacher +Andrew Niccol +Rakhshan Bani-Etemad +David Oelhoffen +Bennett Miller +David Cronenberg +Shin'ya Tsukamoto +Joshua Oppenheimer +Olivier Assayas +Jean-Luc Godard +Alejandro González Iñárritu +Benoît Jacquot +Fatih Akin +Francesco Munzi +Ken Loach +Abel Ferrara +Xavier Beauvois +Naomi Kawase +``` + +And `/film`: + +```csv +title,year,director,rating,language +Chuang ru zhe,2014-01-01,Xiaoshuai Wang,6.19999981,english +The Look of Silence,2014-01-01,Joshua Oppenheimer,8.30000019,Indonesian +Fires on the Plain,2014-01-01,Shin'ya Tsukamoto,5.80000019,Japanese +Far from Men,2014-01-01,David Oelhoffen,7.5,english +Good Kill,2014-01-01,Andrew Niccol,6.0999999,english +Leopardi,2014-01-01,Mario Martone,6.9000001,english +Sivas,2014-01-01,Kaan Müjdeci,7.69999981,english +Black Souls,2014-01-01,Francesco Munzi,7.0999999,english +Three Hearts,2014-01-01,Benoît Jacquot,5.80000019,French +Pasolini,2014-01-01,Abel Ferrara,5.80000019,english +Le dernier coup de marteau,2014-01-01,Alix Delaporte,6.5,english +Manglehorn,2014-01-01,David Gordon Green,7.0999999,english +Hungry Hearts,2014-01-01,Saverio Costanzo,6.4000001,English +Belye nochi pochtalona Alekseya Tryapitsyna,2014-01-01,Andrey Konchalovskiy,6.9000001,Russian +99 Homes,2014-01-01,Ramin Bahrani,7.30000019,english +The Cut,2014-01-01,Fatih Akin,6,Armenian +Birdman: Or (The Unexpected Virtue of Ignorance),2014-01-01,Alejandro González Iñárritu,8,English +La rançon de la gloire,2014-01-01,Xavier Beauvois,5.69999981,French +A Pigeon Sat on a Branch Reflecting on Existence,2014-01-01,Roy Andersson,7.19999981,english +Tales,2014-01-01,Rakhshan Bani-Etemad,6.80000019,english +The Wonders,2014-01-01,Alice Rohrwacher,6.80000019,Italian +Foxcatcher,2014-01-01,Bennett Miller,7.19999981,English +Mr. Turner,2014-01-01,Mike Leigh,7,English +Jimmy's Hall,2014-01-01,Ken Loach,6.69999981,English +The Homesman,2014-01-01,Tommy Lee Jones,6.5999999,English +The Captive,2014-01-01,Atom Egoyan,5.9000001,english +Goodbye to Language,2014-01-01,Jean-Luc Godard,6.19999981,French +The Search,2014-01-01,Michel Hazanavicius,6.9000001,French +Still the Water,2014-01-01,Naomi Kawase,6.9000001,Japanese +Mommy,2014-01-01,Xavier Dolan,8.30000019,French +"Two Days, One Night",2014-01-01,Jean-Pierre Dardenne,7.4000001,French +Maps to the Stars,2014-01-01,David Cronenberg,6.4000001,English +Saint Laurent,2014-01-01,Bertrand Bonello,6.5,French +Clouds of Sils Maria,2014-01-01,Olivier Assayas,6.9000001,english +Winter Sleep,2014-01-01,Nuri Bilge Ceylan,8.5,Turkish +``` + +Finally `/film_nomination`: + +```csv +competition,film,won +1,1,f +1,2,f +1,3,f +1,4,f +1,5,f +1,6,f +1,7,f +1,8,f +1,9,f +1,10,f +1,11,f +1,12,f +1,13,f +1,14,f +1,15,f +1,16,f +1,17,f +1,18,f +1,19,f +1,20,f +2,21,f +2,22,f +2,23,f +2,24,f +2,25,f +2,26,f +2,27,f +2,28,f +2,29,f +2,30,f +2,31,f +2,32,f +2,33,f +2,34,f +2,35,f +``` + +At this point nominations are fully specified but it's not a convenient interface for a rest client. Let's make a view they can use. Paste this into `psql demo1`. + +```sql +create or replace view nomination as +select comp.festival, + comp.name as competition, + comp.year, + film.title, + film.director, + film.rating + from film_nomination as nom + left join film on nom.film = film.id + left join competition as comp on nom.competition = comp.id + order by comp.year desc, comp.festival, competition; +``` + +Time to try it out. Let's get the contents of the new view, ordered by film rating + +``` +GET http://localhost:3000/nomination?order=rating.desc +``` + +If you find it more human readable, add an `Accept: text/csv` header. + +### Releasing a New Version + +Suppose we want this endpoint to cater to those moviegoers with attention deficit disorder. In today's busy world we don't have time to read an extra couple words or compare nuanced reviews. In API version two we will truncate the names and round the ratings! + +Each version lives in a numbered schema, so let's make a schema for version two. + +```sql +CREATE SCHEMA "2"; +GRANT USAGE ON SCHEMA "2" TO PUBLIC; +ALTER DATABASE demo1 SET search_path = "2", "public"; +``` + +To override the `films` endpoint create a view in the "2" schema with that name: + +```sql +create or replace view "2".film as +select id, substring(f.title from 1 for 10) as title, + year, director, round(f.rating) as rating, language +from "public".film as f; +``` + +We select the desired version as part of content negotiation. Try this get request: + +```HTTP +GET http://localhost:3000/film +Accept: text/csv; version=2 +``` + +Then try toggling the version string in the Accept header and watch the results change. Pretty good, now how about writing values? PostgreSQL's nice feature called auto-updatable views allows writes to pass through views. Sadly this view is not eligible because truncation and rounding cannot be uniquely reversed. If we attempt to post a new result it complains: + +```json +{ + "hint": null, + "details": "View columns that are not columns of their base relation are not updatable.", + "code": "0A000", + "message": "cannot insert into column \"title\" of view \"film\"" +} +``` + +This is a case where we need explicit triggers + +```sql +-- TODO - FIX THIS + +-- CREATE OR REPLACE RULE insert_v2_films AS +-- ON INSERT TO "2".film +-- DO INSTEAD +-- INSERT INTO public.film (id, title, year, director, rating, language) +-- VALUES (NEW.id, NEW.title, +-- NEW.year, NEW.director, +-- NEW.rating, NEW.language) +-- RETURNING public.film.*; +``` diff --git a/docs/favicon.ico b/docs/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..2e6823b5e1a530fe19735bcccdac80693ad35a3b GIT binary patch literal 3134 zcmZQzU}Ruq5LW=v3Je-N3=Con3=A3!3=HB73=9qo5OD?u28IT15Q&PvfB*h}sN-M1 ze*ORb`!_}S=g*%Q;qdwM=l^^6?)|@d^=hnm&6+j;L3r`v#b6qjx~o^O{{Qjg2a5S$ zzI^$A^5n_?yLRpRzkBy?6uf88p8s37ZvCH~5E z{-VW;|Ci+_|6kMQ^?y!l;{WvY^#AA1od>IZ|NcFghN%bX1^E%(9+23QB}@Kyc6R>n z>gxL6-QE4aw6yepbVSJiUr6m0?D9HbxmYVdxAT#cN zLTu#!{rmUB-4Ajjy1SA2pfCifsVFc1zo;ej|IBpp|1;Ai{x2-n`oFB%=l|lCkpD}Y zy#8m1m`!9eo*|v%!ARO^nK#QiT^ux?D)TP=T30?F0ZKg zpA-}He?>>g|Aj^B|L5e$|DTm5^M8J!>i=oYssFvay#6mOpA}6s9mY z!)TD7kTEE1K;c+jQwxr_Rc+q?7nSP#Z!AmwzjWEM|9}7fB`NQ~>;c*R`SX|mQ>RY* zUsaU$e`Sj&IGmR?IRDSfPWylN?p<)+fvG1%gUo|rP#8^{HvNBje)9hnEuQ~pW^{M@Yn&z?O4n+;PBqp{fmN^_vHZSv&F|EEr!`oFTW@_$@R#Q*huk&rZ)A^Cqs zy7>R4)#m>TvJ(DRR#t)4O_?&~KMaHPo;r03BQ8PV3X0=PmoELkeEIVKQ>RYHn83SqhFzm>v)f3LBVt$TUbCBoD(N^Y`xC z_dh>7<^PISA9&b+!hU&M!2g2ml>ckjt_6nyOb^HmWHUi*P(FO{;KBbJH*SFQ87Qy8 za8-5n|HjfJa9#xEeURIilo{J*3l`hQkNDmX4d<{+yFg#ob`luyr|JNG|7JN5taMyLPFTmAp%W+wmN zv12DV9*H#vT^-0xZ{EE9Ur|x{e|mHB|Fs={|4Z|d|AXoxkQ};tQuv^Pg{) z%szPV(EqH|*#GU-8UKrmi~c`(@&sIlkYWxlwV?89^Oi0D=ggV=AC&e%`2&|)a>POI T2VqL%jvTx3=|OFc)1Ly^^ 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 I&MBb@0C(hUcmMzZ literal 0 HcmV?d00001 diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 000000000..85756e784 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,68 @@ +![PostgREST logo](img/logo.png) + +## Introduction + +PostgREST is a standalone web server that turns your database directly into a RESTful API. The structural constraints and permissions in the database determine the API endpoints and operations. + +This guide explains how to install the software and provides practical examples of its use. You'll learn how to build a fast, versioned, secure API and how to deploy it to production. + +The project has a friendly and growing community. Here are some ways to get help or get involved: + +* The project [chat room](https://gitter.im/begriffs/postgrest) +* Report or search [issues](https://github.com/begriffs/postgrest/issues) + +### Motivation + +Using PostgREST is an alternative to manual CRUD programming. Custom API servers suffer problems. Writing business logic often duplicates, ignores or hobbles database structure. Object-relational mapping is a leaky abstraction leading to slow imperative code. The PostgREST philosophy establishes a single declarative source of truth: the data itself. + +#### Declarative Programming + +It's easier to ask Postgres to join data for you and let its query planner figure out the details than to loop through rows yourself. It's easier to assign permissions to db objects than to add guards in controllers. (This is especially true for cascading permissions in data dependencies.) It's easier set constraints than to litter code with sanity checks. + +#### Leakproof Abstraction + +There is no ORM involved. Creating new views happens in SQL with known performance implications. A database administrator can now create an API from scratch with no custom programming. + +#### Embracing the Relational Model + +In 1970 E. F. Codd criticized the then-dominant hierarchical model of databases in his article A Relational Model of Data for Large Shared Data Banks. Reading the article reveals a striking similarity between hierarchical databases and nested http routes. With PostgREST we attempt to use flexible filtering and embedding rather than nested routes. + +#### One Thing Well + +PostgREST has a focused scope. It works well with other tools like Nginx. This forces you to cleanly separate the data-centric CRUD operations from other concerns. Use a collection of sharp tools rather than building a big ball of mud. + +#### Shared Improvements + +As with any open source project, we all gain from features and fixes in the tool. It's more beneficial than improvements locked inextricably within custom codebases. + +### Myths + +#### You have to make tons of stored procs and triggers + +Modern PostgreSQL features like auto-updatable views and computed columns make this mostly unnecessary. Triggers do play a part, but generally not for irksome boilerplate. When they are required triggers are preferable to ad-hoc app code anyway, since the former work reliably for any codepath. + +#### Exposing the database destroys encapsulation + +PostgREST does versioning through database schemas. This allows you to expose tables and views without making the app brittle. Underlying tables can be superseded and hidden behind public facing views. The chapter about versioning shows how to do this. + +### Conventions + +This guide contains highlighted notes and tangential information interspersed with the text. + +

+

Design Consideration

+ +

Contains history which informed the current design. Sometimes it discusses unavoidable tradeoffs or a point of theory.

+
+ +
+

Invitation to Contribute

+ +

Points out things we know we want to add or improve. They might give you ideas for ways to contribute to the project.

+
+ +
+

Deprecation Warning

+ +

Alerts you to features which will be removed in the next major (breaking) release.

+
diff --git a/docs/install/ecosystem.md b/docs/install/ecosystem.md new file mode 100644 index 000000000..520baab37 --- /dev/null +++ b/docs/install/ecosystem.md @@ -0,0 +1,23 @@ +## Ecosystem + +### Client-Side Libraries + +* [mithril.postgrest](https://github.com/catarse/mithril.postgrest) - Mithril plugin to create and authenticate requests +* [lewisjared/postgrest-request](https://github.com/lewisjared/postgrest-request) - node interface to postgrest instances +* [JarvusInnovations/jarvus-postgrest-apikit](https://github.com/JarvusInnovations/jarvus-postgrest-apikit) - Sencha framework package for binding models/stores/proxies to PostgREST tables + +### Extensions + +* [srid/spas](https://github.com/srid/spas) - allow file uploads and basic auth + +### Example Apps + +* [timwis/ext-postgrest-crud](https://github.com/timwis/ext-postgrest-crud) - browser-based spreadsheet +* [srid/chronicle](https://github.com/srid/chronicle#deploying-to-heroku) - tracking a tree of personal memories +* [begriffs/postgrest-example](https://github.com/begriffs/postgrest-example) - how to configure a db for use as an API +* [marmelab/ng-admin-postgrest](https://github.com/marmelab/ng-admin-postgrest) - automatic database admin panel +* [tyrchen/goodfilm](https://github.com/tyrchen/goodfilm) - example film api + +### In Production + +* [Catarse](https://www.catarse.me/) diff --git a/docs/install/server.md b/docs/install/server.md new file mode 100644 index 000000000..0aa876a29 --- /dev/null +++ b/docs/install/server.md @@ -0,0 +1,70 @@ +## Installation + +### Installing from Pre-Built Release + +The [release page](https://github.com/begriffs/postgrest/releases/latest) has precompiled binaries for Mac OS X and 64-bit Ubuntu. Next extract the tarball and run the binary inside with no arguments to see usage instructions: + +```sh +# Untar the release (available at https://github.com/begriffs/postgrest/releases/latest) + +$ tar zxf postgrest-0.2.11.1-osx.tar.xz + +# Try running it +$ ./postgrest-0.2.11.1 + +# You should see a usage help message +``` + +
+

Deprecation Warning

+ +

The filename inside the tarball currently includes a version + number, but this will be removed in the next version for cleaner + post-extraction scripting.

+
+ +
+

Invitation to Contribute

+ +

I currently build the binaries manually for each version. We need to set up an automated build matrix for various architectures. It should support 32- and 64-bit versions of + +

  • Scientific Linux 6
  • CentOS
  • RHEL 6
+ + Also it would be good to create packages for Homebrew, and apt.

+
+ +We'll learn the meaning of the command line flags later, but here is a minimal example of running the app. It does all operations as user `postgres`, including for unauthenticated requests. + +```sh +$ ./postgrest-0.2.11.1 -d dbname -U postgres --a postgres --v1schema public +``` + +### Building from Source + +When a prebuilt binary does not exist for your system you can build the project from source. You'll also need to do this if you want to help with development. [Stack](https://github.com/commercialhaskell/stack) makes it easy. It will install any necessary Haskell dependencies on your system. + +* [Install Stack](https://github.com/commercialhaskell/stack#how-to-install) for your platform +* Build the project + +```bash +git clone https://github.com/begriffs/postgrest.git +cd postgrest +stack build +``` + +* Run the server + +```bash +stack exec postgrest -- arg1 arg2 +# ... your arguments after the double dashes +``` + +If you want to run the test suite, stack can do that too: `stack test`. + +### Installing PostgreSQL + +To use PostgREST you will need an underlying database. You can use something like Amazon [RDS](https://aws.amazon.com/rds/) but installing your own locally is cheaper and more convenient for development. + +* [Instructions for OS X](http://exponential.io/blog/2015/02/21/install-postgresql-on-mac-os-x-via-brew/) +* [Instructions for Ubuntu 14.04](https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu-14-04) + diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 000000000..f5118c782 --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,24 @@ +site_name: PostgREST +site_url: http://postgrest.com +site_description: Building declarative APIs +site_author: Joe Nelson +site_favicon: favicon.ico + +repo_url: https://github.com/begriffs/postgrest + +pages: +- Home: index.md +- Install: + - The Server: install/server.md + - Ecosystem: install/ecosystem.md +- API: + - Reading: api/reading.md + - Writing: api/writing.md +- Admin: + - Security: admin/security.md + - Versioning: admin/versioning.md + - Migration: admin/migration.md + - Deployment: admin/deployment.md + - Performance: admin/performance.md +- Examples: + - Getting Started: examples/start.md