From 55230329b771fc513e25ad2abeee0972d9813084 Mon Sep 17 00:00:00 2001 From: "Eric L. Truitte, MBA" Date: Tue, 23 Jul 2019 16:50:32 -0400 Subject: [PATCH] Update documentation to be more easily understood * Move technical specifications for API Endpoints to a separate file. * Update README with meaningful information * Update CONTRIBUTING with better copy * Update docs for typos * Add install documentation links for local tools --- API_ENDPOINT_SPECIFICATION.md | 134 ++++++++++++++ CONTRIBUTING.md | 202 ++++++++++---------- README.md | 340 ++-------------------------------- 3 files changed, 245 insertions(+), 431 deletions(-) create mode 100644 API_ENDPOINT_SPECIFICATION.md diff --git a/API_ENDPOINT_SPECIFICATION.md b/API_ENDPOINT_SPECIFICATION.md new file mode 100644 index 0000000..31dd03e --- /dev/null +++ b/API_ENDPOINT_SPECIFICATION.md @@ -0,0 +1,134 @@ +# The Hurricane API Endpoint Specification + +### Routing + +* Root URL: `https://api.hurricane-response.org` +* Namespaced and versioned: `/api/v1` + +### Common Filtering + +Filters can be applied with URL Parameters. Available filter options are provided per endpoint. + + +### Shelters Endpoint + +`https://api.hurricane-response.org/api/v1/shelters` + +#### Filter Options + +* `accepting` : "yes", "no", "unknown" +* `special_needs` : boolean +* `county` : the county +* `name` : the shelter name +* `lat` and `lon` : specify the lat / lon. We'll order by the lat/lon and return results within a 100 mile radius +* `limit`: only return n results + +* Sample API for list of all shelters accepting people: `https://api.hurricane-response.org/api/v1/shelters?accepting=yes` + +#### Sample JSON array + +``` +{ + "shelters": [ + { + "county": "Halifax County", + "shelter": "Kirkwood Adams Community Center", + "address": "1100 Hamilton St, Roanoke Rapids, NC 27870, USA", + "city": "Roanoke Rapids", + "state": null, + "zip": "27870", + "phone": "(252) 533-2847", + "accepting": true, + "updated_by": null, + "notes": null, + "volunteer_needs": null, + "longitude": -77.656588, + "latitude": 36.453215, + "source": "FEMA GeoServer", + "google_place_id": "ChIJQ4dpqM0QrokR26weAUx2W3A", + "special_needs": false, + "id": 20, + "pets": "No", + "pets_notes": null, + "needs": [], + "updated_at": "2018-09-12T10:57:48-05:00", + "updatedAt": "2018-09-12T10:57:48-05:00", + "last_updated": "2018-09-12T10:57:48-05:00", + "cleanPhone": "2525332847" + }, + ... + ], + "meta": { + "result_count": 154, + "filters": { + "accepting": "yes" + } + } +} +``` + +### Distribution Points API + +`https://api.hurricane-response.org/api/v1/distribution_points` + +#### Filter Options + +* `active` : true +* `county` : the county +* `name` : the facility name +* `lat` and `lon` : specify the lat / lon. We'll order by the lat/lon and return results within a 100 mile radius +* `limit`: only return n results + +Sample: + +`/api/v1/distribution_points?active=true` + + * Filters out non-active distribution points + +`/api/v1/distribution_points?name=Aurora` + + * Filters by facility name + +#### Sample JSON array + +``` +{ + "distribution_points": [ + { + "active": true, + "facility_name": "Aurora Volunteer Fire Department", + "address": "99 NC-33, Aurora, NC 27806, USA", + "city": "Aurora", + "county": "Beaufort County", + "state": "North Carolina", + "zip": "27806", + "created_at": "2018-09-20T01:17:51.163Z", + "updated_at": "2018-09-19T20:17:51-05:00", + "updated_by": null, + "source": "CEDR", + "notes": null, + "longitude": -76.7805402, + "latitude": 35.300329, + "google_place_id": "ChIJvwUAsqBJr4kRCyHLlSGkWLo", + "id": 1, + "updatedAt": "2018-09-19T20:17:51-05:00", + "last_updated": "2018-09-19T20:17:51-05:00" + } + ], + "meta": { + "result_count": 1, + "filters": { + "active": "true" + } + } +} +``` + +### Needs API +`depricated` + +### Products API +`depricated` + +### Charitable Organizations API +`depricated` diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8e5e9ea..652975b 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,104 +1,73 @@ -# The Hurricane Florence API +# The Hurricane API Contributing -* We serve JSON data here, open and fresh -* We help client applications help those affected by Hurricane Florence. +## Getting Started -## Contributing +### Prequisites -### Getting Started +* A Github Account -#### Prequisites +Docker can be used to get up and running quickly, or a local environment can be setup with these tools: -* Ruby 2.4.1 -* Rails 5.1 -* Docker (Optional) +* Ruby 2.6.0 +* Rails 5.2 +* PostgreSQL 9.6+ +* Redis 4+ -##### Fork Repository +### Fork Repository -* Prequisites - * A github account and a repository into which to fork other repositories -* Steps - 1. Navigate in a browser to https://github.com/hurricane-response/florence-api - 2. Click the Fork button in the upper right of the screenshot_create-service-account-key - 3. If prompted choose into where you want to form (e.g., if you are a member of multiple github repositories) - 4. You'll now have a forked version - your own version - of the repository. - 5. Go to "Clone or download" button on right of screen and copy that URL. It will be of the format `git clone git@github.com:/florence-api.git` + 1. Navigate in a browser to [https://github.com/hurricane-response/florence-api](https://github.com/hurricane-response/florence-api) + 2. Click the Fork button in the upper right of the repository frame + 3. If prompted choose into where you want to fork (e.g., if you are a member of multiple github repositories) + 4. You'll now have a forked version - your own version - of the repository #### Clone Fork to local box -* In the directory on your local box in which you plan to work run: `git clone git@github.com:/florence-api.git` +1. Go to the green "Clone or download" button on right of screen of the repository frame and copy that URL. It will be of the format `https://github.com//florence-api.git` (this URL will be different if you are using SSH) +2. In the directory on your local box in which you plan to work: `git clone https://github.com//florence-api.git` +3. Press `enter` and watch git fetch the repository for you into a sub-directory named `florence-api` -#### Configuration - -##### Setting up your .env file - -You'll need to create a `.env` file with some ENV variables that support features in the app. - -To start, make a working copy of the sample `.env` file in this repo by running this command at the terminal: `cp .env.sample .env`. - -##### Google Maps API Geocoding support - -To support Geocoding with Google Maps API, [get an API key](https://console.developers.google.com/flows/enableapi?apiid=geocoding_backend&keyType=SERVER_SIDE) and add it to your `.env` file with the name `GOOGLE_GEOCODER_API_KEY`: - -```{env} -GOOGLE_GEOCODER_API_KEY= -``` - -##### Amazon Products support - -**Note:** this is optional; currently only needed to fetch new Amazon products from the Amazon Product Advertising API. - -Ensure you have an Amazon AWS account. Once you do, login and go to the IAM (Identity & Access Management) service. There, you'll do the following things: - -1. If you prefer, create a user for this service. -2. With the user you want to use for this purpose, get an Access Key and Secret Key from IAM. Make sure to record these in a convenient place (a password keeper, for example), as the Secret Key cannot be retrieved once initially provided. -3. Create an IAM Policy named `Product Advertising API` as follows: - ```{json} -{ - "Version": "2012-10-17", - "Statement": [ - { - "Effect": "Allow", - "Action": "ProductAdvertisingAPI:*", - "Resource": "*" - } - ] -} -``` -4. Attach the IAM Policy you created to the user you created for whom you the keys. - -Once these steps are complete, add the keys to your `.env` file as follows: - -```{env} -AWS_ACCESS_KEY_ID= -AWS_SECRET_ACCESS_KEY= -``` - -#### Setting up local environment via Docker - -##### Docker +### Option 1: Setting up local environment via Docker 1. Follow the instructions that can be found within the Docker site starting [here](https://www.docker.com/get-started). -2. Once you have Docker installed and running execute the following command to build and deploy your containers locally by executing the following command from the project root directory: -```sh -RAILS_ENV=development docker-compose up --build -``` -3. When you are done development work, don't forget to bring everything down gracefully by executing the following command from the project root directory: -```sh -docker-compose down +2. Once you have Docker installed and running execute the following command to build and deploy your containers locally by executing the following command from the project root directory: `RAILS_ENV=development docker-compose up --build` +3. Edit your files, work on data, develop a feature; do whatever you intend to do, at this point. When you are finished, commit, push to github, and create a pull request if you intend to share the results of your effort with the rest of the community. +4. When you are done development work, don't forget to bring everything down gracefully by executing the following command from the project root directory: +`docker-compose down` + +### Option 2: Manually setting up local environment + +#### Prerequisites + +- Postgres (9.6 or higher): https://wiki.postgresql.org/wiki/Detailed_installation_guides +- Ruby (using rbenv or rvm install version 2.6.0): https://www.ruby-lang.org/en/documentation/installation/ +- Rails: https://guides.rubyonrails.org/getting_started.html +- Redis: + - Linux: https://redis.io/topics/quickstart + - Windows: https://redislabs.com/ebook/appendix-a/a-3-installing-on-windows/a-3-2-installing-redis-on-window/ + - Mac: Using homebrew: ``` + brew update + brew install redis -#### Setting up local environment manually + # If you want it to autorun for you at startup: + brew services start redis -##### Prerequisites + # if you want to run it only when working: + redis-server /usr/local/etc/redis.conf -* PostgreSQL (9.2+) is installed and running on your local machine + # test if redis is running, the following command should + # return 'PONG': + redis-cli ping +``` -##### Method 1: Automatic +#### Database Setup Method 1: Automatic Run `rails db:setup` -##### Method 2: Manual +#### Database Setup Method 2: Manual + +##### First Time Setup +If you are setting up your database for the first time: * Create a postgres users It's recommended though optional that you use a distinct user for the harvey-api database @@ -106,33 +75,48 @@ Run `rails db:setup` The `-P` flag will prompt you to create a password for the new user * Create the database (with the owner of the database set to user just created in the last step) * Example `createdb -O harvey-api_development harvey-api_development` +* Run rails structure load to create the schema: `rails db:structure:load`, otherwise you can migrate to get any new updates: `rails db:migrate` -##### Ensuring you have the latest schema +#### Importing data -If you are setting up your database for the first time, run rails structure load to create the schema: `rails db:structure:load`, otherwise you can migrate to get any new updates: `rails db:migrate` +##### Shelters and Distribution Points from Production API (Optional) -##### Importing data +**THIS COMMAND IS INTENDED FOR DEVELOPMENT ENVIRONMENTS ONLY** -###### Shelters and Needs from Production API +This import will pull data from the production API so you can mirror live data in your local/personal development environment. If you are working with the production API server, do not use this command as it would duplicate data already present in the production API database. -Import needs and shelters data from the production API: `rails api:import` +This command is _optional_ and can consume a lot of time / geocoding credits with Google, so be mindful if you choose to import of how many records are currently available in the Production API. + +To import shelters and distribution points data from the production API, run: `rails api:import` Sample output if successful ```{text} Starting ImportSheltersJob 2017-09-03 18:33:03 +0000 ImportSheltersJob Complete - {285} -Starting ImportNeedsJob 2017-09-03 18:33:05 +0000 -ImportNeedsJob Complete - {92} ``` -**DO NOT RUN THIS JOB IN PRODUCTION.** Since this job pulls data from the production API, running it in production can only be counter-productive, and would likely be destructive. The `ActiveJob`s and associated Rake task `rails api:import`, which imports data for shelters and needs from the production API into the application database, is intended for use in development and test environments only. +##### Third Party Imports + +There are other imports that can be run to pull data from NSS, or other source on a per-event basis. Speak with a collaborator to find out more. + +### Configuration + +##### Setting up your .env file + +You'll need to create a `.env` file with some ENV variables that support features in the app. + +To start, make a working copy of the sample `.env` file in this repo by running this command at the terminal: `cp .env.sample .env`. -###### Amazon Products Data (optional) +##### Google Maps API Geocoding support -You can load Amazon Products by seeding your database: `rails db:seed`, or doing a full import `rails amazon:import` +To support Geocoding with Google Maps API, [get an API key](https://console.developers.google.com/flows/enableapi?apiid=geocoding_backend&keyType=SERVER_SIDE) and add it to your `.env` file with the name `GOOGLE_GEOCODER_API_KEY`: -#### User Administration +```{env} +GOOGLE_GEOCODER_API_KEY= +``` + +### User Administration In `rails console` you'll want to create an admin user: @@ -140,7 +124,7 @@ In `rails console` you'll want to create an admin user: User.create! email: "youremail@example.com", password: "yourpassword", admin: true ``` -#### Test the API itself (Run API locally) +### Test the API itself (Run API locally) Run the api with: `rails server` @@ -151,20 +135,22 @@ Screenshot of Success: #### Tests and Testing -Code should have tests, and any pull requests should be made only after you've made sure passes the test suite - -#### Git and Github use +Code should have tests, and any pull requests should be made only after you've made sure passes the test suite. -We force pull-requests from feature branches to master. Once something lands in master, it goes live instantly +### git Repository Etiquette -##### Keeping your fork in sync +#### Keeping your fork in sync * `git remote add upstream git@github.com:hurricane-response/florence-api.git` -* `git fetch upstream` +* `git pull upstream` and merge conflicts, if any. #### Branching -Within your own forked repo create branches for each logical unit for work you do. One benefit of doing this is you'll be able to periodically sync your forked repo with upstream repo into the master branch without conflicting with work you may be doing. +Within your own forked repo create branches for each logical unit of work you do. One benefit of doing this is you'll be able to periodically sync your forked repo with upstream repo into the master branch without conflicting with work you may be doing. + +Make sure to push your work to your fork on github frequently to save yourself if something happens to your local system. + +When you find your branch diverges from master, please feel free to make liberal use of `git rebase master` on your working branch. #### Pull Requests @@ -176,22 +162,20 @@ When you believe your code is ready to be merged into the upstream repository (h ##### More Information and Further Reading -* More information about keeping your fork in sync with the upstream repository may be found at https://help.github.com/articles/syncing-a-fork/ -* More information about branching can be found at https://git-scm.com/book/id/v2/Git-Branching-Branches-in-a-Nutshell - -### Documentation Standards +* More information about keeping your fork in sync with the upstream repository may be found at [Synching a Fork](https://help.github.com/articles/syncing-a-fork/) +* More information about branching can be found at [Git Branching in a Nutshell](https://git-scm.com/book/id/v2/Git-Branching-Branches-in-a-Nutshell) -#### Inline Comment Style +### Source Code Style -(Coming Soon) +Run `rubocop` on your changes before committing. Take the results of this with a grain of salt, but please try to manage any style violations. -#### Markdown +For references on common styles (that this repository deviates from somewhat), please review the style guides in the Appendix below. -Documentation such as READMEs (e.g., this document) are written in markdown per the [Github standard] (https://guides.github.com/features/mastering-markdown/) +Note: Keep in mind not all of the styles provided by rubocop are observed here. One reason is rails generators do not produce code that complies with rubocop defaults. You'll notice significant cop alterations in `.rubocop.yml`. We will eventually get to the point where we have less alterations in the rubocop config and runs without errors, at which point we will add rubocop to our CI/CD pipeline. ### Design Choices -* Hosted on Heroku with PostGres +* Hosted on Heroku with Postgres and Redis * Uses ActiveJob (currently with sucker_punch) * MiniTest with Rails system tests @@ -200,6 +184,8 @@ Documentation such as READMEs (e.g., this document) are written in markdown per ### Developer Resources * [Mastering Markdown](https://guides.github.com/features/mastering-markdown) +* [Ruby Style Guide](https://github.com/rubocop-hq/ruby-style-guide) +* [Rails Style Guide](https://github.com/rubocop-hq/rails-style-guide) ### Errors you may get and what they mean diff --git a/README.md b/README.md index f31616d..b317588 100644 --- a/README.md +++ b/README.md @@ -1,342 +1,36 @@ -# The Hurricane Florence API +# The Hurricane Response API -* We serve JSON data here, open and fresh -* We help client applications help those affected by Hurricane Florence. +This API Server is the backend data management dashboard for mapping community resources such as Shelter and Food Distribution Points in disaster-effected regions. It has importers for data from a FEMA managed GeoServer that contains data supplied by the RedCross, and user interfaces for manually updating. -## Developer Quick Links - -* [CONTRIBUTORS](https://github.com/hurricane-response/florence-api/graphs/contributors) -* [GETTING STARTED](#getting-started) -* [LICENSE](#license) -* [CODE OF CONDUCT](CODE_OF_CONDUCT.md) -* [CONTRIBUTING](CONTRIBUTING.md) -* [CHANGELOG](CHANGELOG.md) - -## API Specification - -### Overall - -* URI: https://hurricane-florence-api.herokuapp.com -* Namespaced and versioned: `/api/v1` - -* Sample API for list of all shelters: https://hurricane-florence-api.herokuapp.com/api/v1/shelters -* Sample API for list of all shelters accepting people: https://hurricane-florence-api.herokuapp.com/api/v1/shelters?accepting=true - -### Shelters Endpoint - -Shape (with truncated `"shelters"` array): - -```{json} -{ - "shelters": [{ - "county": "Halifax County", - "shelter": "Kirkwood Adams Community Center", - "address": "1100 Hamilton St, Roanoke Rapids, NC 27870, USA", - "city": "Roanoke Rapids", - "state": null, - "zip": "27870", - "phone": "(252) 533-2847", - "accepting": true, - "updated_by": null, - "notes": null, - "volunteer_needs": null, - "longitude": -77.656588, - "latitude": 36.453215, - "supply_needs": null, - "source": null, - "google_place_id": "ChIJQ4dpqM0QrokR26weAUx2W3A", - "special_needs": false, - "id": 20, - "pets": "No", - "pets_notes": null, - "needs": [], - "updated_at": "2018-09-12T10:57:48-05:00", - "updatedAt": "2018-09-12T10:57:48-05:00", - "last_updated": "2018-09-12T10:57:48-05:00", - "cleanPhone": "2525332847" - }, { - "county": "Chatham County", - "shelter": "Chatham Middle School", - "address": "2025 S 2nd Ave Exd, Siler City, NC 27344, USA", - "city": "Siler City", - "state": null, - "zip": "27344", - "phone": "(919) 663-2414", - "accepting": true, - "updated_by": null, - "notes": null, - "volunteer_needs": null, - "longitude": -79.4471715, - "latitude": 35.707201, - "supply_needs": null, - "source": null, - "google_place_id": "ChIJD6tN9XRMU4gRUd7DfIO6S3g", - "special_needs": false, - "id": 31, - "pets": "Yes", - "pets_notes": null, - "needs": [], - "updated_at": "2018-09-13T19:16:19-05:00", - "updatedAt": "2018-09-13T19:16:19-05:00", - "last_updated": "2018-09-13T19:16:19-05:00", - "cleanPhone": "9196632414" - }, { - "county": "Johnston County", - "shelter": "West Johnston High School", - "address": "5935 Raleigh Rd, Benson, NC 27504, USA", - "city": "Benson", - "state": null, - "zip": "27504", - "phone": "(919) 934-7333", - "accepting": true, - "updated_by": null, - "notes": null, - "volunteer_needs": null, - "longitude": -78.5381849, - "latitude": 35.5237203, - "supply_needs": null, - "source": null, - "google_place_id": "ChIJVWw5mj57rIkRKh8huvYkSJo", - "special_needs": false, - "id": 28, - "pets": "Yes", - "pets_notes": null, - "needs": [], - "updated_at": "2018-09-13T11:04:18-05:00", - "updatedAt": "2018-09-13T11:04:18-05:00", - "last_updated": "2018-09-13T11:04:18-05:00", - "cleanPhone": "9199347333" - }], - "meta": { - "result_count": 154, - "filters": { - "accepting": "true" - } - } -} -``` - -Filters: - -* `county` : County Name -* `accepting` : true/false -* `shelter` : the name -* `lat` and `lon` : specify the lat / lon. We'll order by the lat/lon and return results within a 100 mile radius -* `limit`: only return n results - - - -Sample: -`/api/v1/shelters?accepting=true&county=Alachua+County` - - * Filters by Alachua County shelters accepting people - -`/api/v1/shelters?shelter=Archer` - - * Filters shelters with Archer in the name - -### Distribution Points API - -Shape: - -``` -{ - "distribution_points": [{ - "active": true, - "facility_name": "Aurora Volunteer Fire Department", - "address": "99 NC-33, Aurora, NC 27806, USA", - "city": "Aurora", - "county": "Beaufort County", - "state": "North Carolina", - "zip": "27806", - "created_at": "2018-09-20T01:17:51.163Z", - "updated_at": "2018-09-19T20:17:51-05:00", - "updated_by": null, - "source": "CEDR", - "notes": null, - "longitude": -76.7805402, - "latitude": 35.300329, - "google_place_id": "ChIJvwUAsqBJr4kRCyHLlSGkWLo", - "id": 1, - "updatedAt": "2018-09-19T20:17:51-05:00", - "last_updated": "2018-09-19T20:17:51-05:00" - }], - "meta": { - "result_count": 1, - "filters": { - "active": "true" - } - } -} -``` - - -Filters: - -* `active` : true -* `county` : the county -* `name` : the facility name -* `lat` and `lon` : specify the lat / lon. We'll order by the lat/lon and return results within a 100 mile radius -* `limit`: only return n results - -Sample: - -`/api/v1/distribution_points?active=true` - - * Filters out non-active distribution points - -`/api/v1/distribution_points?name=Aurora` +There are planned features to have crowdsourced update tools to help the community update the data in real time as shelter/distribution point records become stale. - * Filters by facility name +## History -### Needs API +The Hurricane API was born out of necessity during Hurricane Harvey in 2017 when Houston, TX was innundated with a storm and people struggled to location shelters. The developers at Sketch City took it upon themselves to crowdsource a solution. This software is the product of their efforts and has continued to be developed by other Code for America brigade members. -Shape: +## Objective -``` -{ - "needs": [ - { - "updated_by": "Taylor", - "timestamp": "2017-08-31 12:52", - "location_name": "BBVA Compass Stadium", - "location_address": "2200 Texas Ave, Houston, TX 77003", - "longitude": "-95.351565", - "latitude": "29.752355", - "contact_for_this_location_name": "", - "contact_for_this_location_phone_number": "", - "are_volunteers_needed": true, - "tell_us_about_the_volunteer_needs": "Need volunteers to process donations, sign up through Red Cross. Friday, September 1 from 8 a.m.-8 p.m. daily. More details: https://www.houstondynamo.com/post/2017/08/30/bbva-compass-stadium-capacity-no-longer-collecting-donations-storm-relief", - "are_supplies_needed": false, - "tell_us_about_the_supply_needs": "No longer taking donations", - "anything_else_you_would_like_to_tell_us": "" - } - ], - "meta": { - "result_count": 1, - "filters": { - "location_name": "BBVA" - } - } -} -``` +* We serve GeoJSON to mapping front-ends +* We help client applications help those affected by hurricanes and other natural disasters. -Filters: - -* `supplies_needed` : true -* `volunteers_needed` : true -* `location_name` : the name -* `lat` and `lon` : specify the lat / lon. We'll order by the lat/lon and return results within a 100 mile radius -* `limit`: only return n results - -Sample: - -`/api/v1/needs?location_name=Montgomery` - - * Filters by location_name - -`/api/v1/needs?supplies_needed=true` - - * Who needs supplies - -### Products API - -Shows needs as an Amazon Product, ready for purchase. - -Shape: - -``` -{ - "products": [ - { - "need": "pet items", - "asin": "B00ME73XUG", - "amazon_title": "PET FACTORY 28750 Chicken Dog Roll, 40-Pack", - "detail_url": - "https://www.amazon.com/FACTORY-28750-Chicken-Roll-40-Pack/dp/B00ME73XUG?psc=1&SubscriptionId=AKIAJ5PESCDQX7KIMQ5Q&tag=oneclickrelie-20&linkCode=xm2&camp=2025&creative=165953&creativeASIN=B00ME73XUG", - "priority": false, - "category_specific": "Rawhide", - "category_general": "Pet Supplies", - "price_in_cents": 2352, - "price": "$23.52" - } - ], - "meta": { - "result_count": 247 - } -} -``` - -Filters: - -* `need` : Name of need, eg: 'baby' -* `priority` : `true`. Note: data has to be gathered to make this true -* `limit`: only return n results -* `category`: matching either the category_specific or category_general - -Sample: - -`/api/v1/products?limit=2&need=baby` - - * Returns 1 result, only for needs with `baby` - -### Charitable Organizations API - -Shape: - -``` -{ - "charitable_organizations": [ - { - "name": "Boys and Girls Country", - "services": "Children", - "food_bank": false, - "donation_website": "https://www.boysandgirlscountry.org/donate", - "phone_number": "(281)351-4976", - "email": "info@boysandgirlscountry.org", - "physical_address": "18806 Roberts Road", - "city": "Hockley", - "state": "TX", - "zip": "77447", - "updatedAt": "2017-09-04T00:58:58.088Z" - } - ], - - "meta": { - "result_count": 1, - "filters": { - "city": "Hockley" - } - } -} -``` - -Filters: - -* `food_bank` : true -* `name` : the name -* `services` : the services provided -* `limit`: only return n results -* `city`: the organizations in a city - -Sample: - -`/api/v1/charitable_organizations?services=schools` - - * Filters by services provided - -`/api/v1/charitable_organizations?food_bank=true` +## Developer Quick Links - * Organizations acting as food banks +* [CONTRIBUTORS](https://github.com/hurricane-response/florence-api/graphs/contributors) +* [GETTING STARTED/CONTRIBUTING](CONTRIBUTING.md) +* [API ENDPOINTS](API_ENDPOINT_SPECIFICATION.md) +* [LICENSE](#license) +* [CODE OF CONDUCT](CODE_OF_CONDUCT.md) +* [CHANGELOG](CHANGELOG.md) ## Thanks to -Source Code Collaborators can be viewed: https://hurricane-florence-api.herokuapp.com/contributors.html + But the API wouldn't mean anything without our volunteers: * [Entire Sketch-City organization](http://sketchcity.org/) * [Code for America](https://www.codeforamerica.org/) +* [Source Code Collaborators](https://api.hurricane-response.org/contributors.html) ## LICENSE