From 6e6ea9dfe875b23ba0121259b923e20f39207880 Mon Sep 17 00:00:00 2001 From: mikebgrep Date: Sun, 3 Nov 2024 11:28:30 +0200 Subject: [PATCH] Deployed 8724982 with MkDocs version: 1.6.1 --- Installation/index.html | 3 +++ assets/logo-docs.png | Bin 52046 -> 57975 bytes search/search_index.json | 2 +- sitemap.xml | 12 ++++++------ sitemap.xml.gz | Bin 253 -> 253 bytes 5 files changed, 10 insertions(+), 7 deletions(-) diff --git a/Installation/index.html b/Installation/index.html index 72225ee..835881d 100644 --- a/Installation/index.html +++ b/Installation/index.html @@ -690,7 +690,10 @@

Installing in Docker containe

Access the admin dashboard at your-domain:80 or your-domain:443

+
+

Info

I will not include steps for setting the domain name servers on this as you can follow the official documentation on your server or the Raspberry Pi documentation.

+

Follow next step to check how you can and must made your first request.

diff --git a/assets/logo-docs.png b/assets/logo-docs.png index 117422702dbf0b029574b35ebf318f8049d52d5a..1731076753e50d20bc21bd4430256f11656367f1 100644 GIT binary patch delta 54377 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 KMNUMnLSTX!{pm&k delta 48572 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 YKc2H%?(KG&$p8QV07*qoM6N<$g0{QpoB#j- diff --git a/search/search_index.json b/search/search_index.json index 0776cd4..d708cfb 100644 --- a/search/search_index.json +++ b/search/search_index.json @@ -1 +1 @@ -{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"ForkAPI","text":""},{"location":"#a-lightweight-restapi-client-that-manage-food-recipies-easily","title":"A lightweight RestAPI client that manage food recipies easily","text":"

ForkAPI is a Django drf based project which can be easily integrated as a backend service for a mobile application or web application that can display, add, favorite a food recipies. The api is designed to be simple to use with build in Dashboard panel to add recipies manual or using the provided endpoints (views in Django).

You can benefit for future support of the project.

Get Started Installation

"},{"location":"Installation/","title":"Installation","text":"

To install the API you need a Python 3.x installed also venv module and pip. Here will be covered two types of installation for debugging and for production.

"},{"location":"Installation/#mutual-steps","title":"Mutual Steps","text":"

Clone the repository with the command

$ git clone https://github.com/mikebgrep/forkapi\n
Rename .env.example to .env In linux
$ cd forkapi\n$ mv .env.example .env \n
Enter the environment variables in .env file.

  • PAGINATION_PAGE_SIZE is used for pagination used in the API certain endpoint.
  • DJANGO_SECRET you can generate the secret online -> link or with the following command if you have installed django on the machine
    $ python -c 'from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())'\n
  • X_AUTH_HEADER also you can generate random UUID online that will be used for authentication for the read only endpoint. Example header 261ec18d-0e81-4073-8d9e-b34a7a1e5e06 (Don`t use it this is for demo purpose)
"},{"location":"Installation/#installing-locally-debug-mode","title":"Installing locally (Debug mode)","text":"

You can create a virtual environment and click of the API. Note replace the 3.x with actual Python version

$ python3.x -m venv .venv && source .venv/bin/activate\n$ pip install -r requirements.txt\n

Make the needed migrations so Django can create sqlite database file with tables.

$ cd forkapi\n$ python manage.py makemigrations authentication\n$ python manage.py makemigrations recipe\n$ python manage.py migrate\n

At this point everything should be ok, and you can start the server.

$ python manage.py runserver\n
You can access the dashboard admin panel on localhost:8000. In this mode you can use it locally if in debug mode which you can change in /forkapi/settings.py file line 27

"},{"location":"Installation/#installing-in-docker-container-production","title":"Installing in Docker container (Production)","text":"

To installing in Docker container follow the steps bellow. For Raspberry Pi with Raspbian OS make sure to uncomment the packages in the main Dockerfile on line 16

  • First steps is setting up the fullchain.pem and privkey.pem files needed for the ssl settings in nginx used as reverse proxy.
  • After you obtain ssl certificates for your domain you need to copy them in the nginx/ssl folder.
  • Replace the localhost value for server_name on lines 8 and 14 with your actual domain name in the forkapi/forkapi.nginx.conf configuration file.
  • That all you need to run the docker compose command and the API will be deployed on the server instance or locally on your machine.

    Depends of the available package\n\n$ docker compose up\n\nor \n\n$ docker-compose up\n

  • Access the admin dashboard at your-domain:80 or your-domain:443

I will not include steps for setting the domain name servers on this as you can follow the official documentation on your server or the Raspberry Pi documentation.

Follow next step to check how you can and must made your first request.

"},{"location":"contribution/","title":"Contribution","text":"

Any contribution is welcomed and here the instructions to do so:

  1. Fork the repository
  2. Work on master branch if the changes are not major or create a new branch for major updates
  3. Make your changes and open pull request

Info

For major futures you can open a issue first and then branch that should be named future/name-of-the-change

"},{"location":"contribution/#desired-modifications","title":"Desired modifications","text":"

Note

If you decide to contribute and you have experience with Django a good starting point will be to rework the Django Admin Panel with more fancy look and feel.

"},{"location":"first-request/","title":"Make your first request","text":"

After the API is deployed you need to create a superuser for the admin dashboard. This can be done ether with Django manage.py python manage.py createsuperuser command or using an API Client as Postman or curl CLI tool.

I will present the method with the curl as more convenient method but you can use and Postman.

"},{"location":"first-request/#creating-superuser","title":"Creating superuser","text":"

To create a superuser for login into the Admin Dashboard use the following curl command in you terminal or powershell.

curl --location --request POST --header \"Content-type: application/json\" --header \"X-Auth-Header: X_AUTH_HEADER\"  --data-raw '{\"username\":\"your-username\",\"password\":\"you-password\", \"is_superuser\": true}' 'https://your-domain-name/api/auth/signup'\n
Take a note that you need to change

  • X_AUTH_HEADER with the value from .env file
  • your-username and your-password with valid data
  • https://your-domain-name with actual domain name

When you execute the curl command the admin user will be created you can log in to the admin dashboard from the base url of the api (the domain name).

"},{"location":"rest-references/","title":"Rest Reference","text":""},{"location":"rest-references/#restapi-reference","title":"RestAPI reference","text":""},{"location":"rest-references/#on-this-page-you-can-check-the-restapi-endpoints","title":"On this page you can check the RestAPI endpoints.","text":"

Note

The API has build in csrf protection you may need to attach Cookie with value csrftoken=token to work proparly

"},{"location":"rest-references/#authentication","title":"Authentication","text":""},{"location":"rest-references/#create-admin-user","title":"Create admin user","text":"POST /api/auth/signup"},{"location":"rest-references/#payload","title":"Payload","text":"authentication.UserSerializer
{\n    \"username\": \"username\",\n    \"password\": \"password\",\n    \"is_superuser\": true\n}\n
"},{"location":"rest-references/#headers","title":"Headers","text":"name type data type description X-Auth-Header required UUID Header used for authentication with the API"},{"location":"rest-references/#responses","title":"Responses","text":"http code content-type response 201 application/json User created successfully 400 application/json {\"username\":[\"user with this username already exists.\"]}"},{"location":"rest-references/#example-curl","title":"Example cURL","text":"
 curl --location 'host/api/auth/signup' --header 'X-Auth-Header: X_AUTH_HEADER' --header 'Content-Type: application/json' --data '{\"username\":\"username\",\"password\":\"password\",\"is_superuser\":true}'\n
"},{"location":"rest-references/#obtain-access-token","title":"Obtain access token","text":"POST /api/auth/token"},{"location":"rest-references/#payload_1","title":"Payload","text":"authentication.UserSerializer
{\n    \"username\": \"username\",\n    \"password\": \"password\"\n}\n
"},{"location":"rest-references/#headers_1","title":"Headers","text":"name type data type description X-Auth-Header required UUID Header used for authentication with the API"},{"location":"rest-references/#responses_1","title":"Responses","text":"http code content-type response 200 application/json {\"token\":\"token\",\"user\":{\"username\":\"username\",\"is_superuser\":true}} 404 application/json {\"detail\":\"No User matches the given query.\"} 403 application/json {\"detail\": \"You must use authentication header\"}"},{"location":"rest-references/#example-curl_1","title":"Example cURL","text":"
 `curl --location 'host/api/auth/token' --header 'X-Auth-Header: X_AUTH_HEADER' --header 'Content-Type: application/json' --data '{\"username\":\"username\",\"password\":\"password\"}''\n
"},{"location":"rest-references/#recipe","title":"Recipe","text":""},{"location":"rest-references/#search-for-recipes","title":"Search for recipes","text":"GET /api/recipe/home/"},{"location":"rest-references/#parameters","title":"Parameters","text":"name type data type description name query (optional) string Part or fulll name of the recipe.Recipe object page query (optional) int Page number if there a mutilple pages result"},{"location":"rest-references/#headers_2","title":"Headers","text":"name type data type description X-Auth-Header required UUID Header used for authentication with the API"},{"location":"rest-references/#responses_2","title":"Responses","text":"http code content-type response 200 application/json {\"count\":int,\"next\":string,\"previous\":string,\"results\":[recipe.Recipe obj list]} 403 application/json {\"detail\":\"You must use authentication header\"}"},{"location":"rest-references/#example-curl_2","title":"Example cURL","text":"
 curl --location 'http://host:port/api/recipe/home/?name=name&page=1' --header 'X-Auth-Header: X_AUTH_HEADER\n
"},{"location":"rest-references/#get-favorite-recipes","title":"Get favorite recipes","text":"GET /api/recipe/home/favorites"},{"location":"rest-references/#headers_3","title":"Headers","text":"name type data type description X-Auth-Header required UUID Header used for authentication with the API"},{"location":"rest-references/#responses_3","title":"Responses","text":"http code content-type response 200 application/json {\"count\":int,\"next\":string,\"previous\":string,\"results\":[recipe.Recipe obj list]} 404 application/json {\"detail\":\"No Recipe matches the given query.\"} 403 application/json {\"detail\":\"You must use authentication header\"}"},{"location":"rest-references/#example-curl_3","title":"Example cURL","text":"
 curl --location 'http://host:port/api/recipe/home/favorites/' --header 'X-Auth-Header: X_AUTH_HEADER\n
"},{"location":"rest-references/#get-trending-recipes","title":"Get trending recipes","text":"GET /api/recipe/trending"},{"location":"rest-references/#headers_4","title":"Headers","text":"name type data type description X-Auth-Header required UUID Header used for authentication with the API"},{"location":"rest-references/#responses_4","title":"Responses","text":"http code content-type response 200 application/json [recipe.Recipe objects list] 403 application/json {\"detail\":\"You must use authentication header\"}"},{"location":"rest-references/#example-curl_4","title":"Example cURL","text":"
 curl --location 'localhost:8080/api/recipe/trending' --header 'X-Auth-Header: X_AUTH_HEADER\n
"},{"location":"rest-references/#update-favorite-status","title":"Update favorite status","text":"PATCH /api/recipe/int:pk/favorite"},{"location":"rest-references/#parameters_1","title":"Parameters","text":"name type data type description <int:pk> path (required) int Recipe primary key to be favorited or unfavorited"},{"location":"rest-references/#headers_5","title":"Headers","text":"name type data type description Authorization required Access Token Token obtained from login endpoint example \"token 443c104be8c6daeeaf86df634e69b97668b99900\""},{"location":"rest-references/#responses_5","title":"Responses","text":"http code content-type response 201 application/json \"Success favorite recipe\" 201 application/json \"Success unfavorite recipe\" 403 application/json `{\"detail\":\"You must use authentication header\"} 404 application/json Not Found"},{"location":"rest-references/#example-curl_5","title":"Example cURL","text":"
 curl --location --request PATCH 'host/api/recipe/1/favorite' --header 'X-Auth-Header: X_AUTH_HEADER'\n
"},{"location":"rest-references/#create-recipe","title":"Create recipe","text":"POST /api/recipe/"},{"location":"rest-references/#payload_2","title":"Payload","text":"recipe.Recipe object
{\n    \"image\": file,\n    \"name\": string,\n    \"serves\": int,\n    \"video\": file (optional),\n    \"category\": <int:pk>,\n    \"tag\": <int:pk>,\n    \"prep_time\": int,\n}\n
"},{"location":"rest-references/#headers_6","title":"Headers","text":"name type data type description Authorization required Access Token Token obtained from login endpoint example \"token 443c104be8c6daeeaf86df634e69b97668b99900\" Content-Type multipart/form-data Recipe object Recipe multipart/form-data object"},{"location":"rest-references/#responses_6","title":"Responses","text":"http code content-type response 201 application/json {recipe.Recipe object} 400 application/json {\"tag\":[\"Incorrect type. message\"]} 401 application/json {\"detail\":\"Authentication credentials were not provided.\"}"},{"location":"rest-references/#example-curl_6","title":"Example cURL","text":"
 curl --location 'localhost:8080/api/recipe/'  --header 'Authorization: Token d8916a5f6cf16d2c6a87bc7461bc4680245609f0' --form 'image=@\"/path/image.jpg\"' --form 'name=\"Test recipe creation\"' --form 'serves=\"5\"' --form 'category=\"1\"' --form 'tag=1' --form 'prep_time=\"45\"'\n
"},{"location":"rest-references/#update-recipe-main-info-without-ingredients-and-steps","title":"Update recipe main info (without ingredients and steps)","text":"PUT /api/recipe/int:pk"},{"location":"rest-references/#payload_3","title":"Payload","text":"recipe.Recipe object
{\n    \"image\": file,\n    \"name\": string,\n    \"serves\": int,\n    \"video\": file (optional),\n    \"category\": <int:pk>,\n    \"tag\": <int:pk>,\n    \"prep_time\": int,\n}\n
"},{"location":"rest-references/#parameters_2","title":"Parameters","text":"name type data type description <int:pk> path (required) int Recipe primary key to be updated"},{"location":"rest-references/#headers_7","title":"Headers","text":"name type data type description Authorization required Access Token Token obtained from login endpoint example \"token 443c104be8c6daeeaf86df634e69b97668b99900\" Content-Type multipart/form-data Recipe object Recipe multipart/form-data object"},{"location":"rest-references/#responses_7","title":"Responses","text":"http code content-type response 200 application/json {recipe.Recipe object} 400 application/json {\"tag\":[\"Incorrect type. message\"]} 401 application/json {\"detail\":\"Authentication credentials were not provided.\"}"},{"location":"rest-references/#example-curl_7","title":"Example cURL","text":"
 curl --location --request PUT 'host/api/recipe/1' --header 'Authorization: Token d8916a5f6cf16d2c6a87bc7461bc4680245609f0' --form 'image=@\"/path/image.jpg\"' --form 'name=\"Update name\"' --form 'serves=\"4\"' --form 'category=\"1\"' --form 'tag=\"1\"' --form 'prep_time=\"21\"'\n
"},{"location":"rest-references/#category","title":"Category","text":""},{"location":"rest-references/#get-all-categories","title":"Get all categories","text":"GET /api/recipe/trending"},{"location":"rest-references/#headers_8","title":"Headers","text":"name type data type description X-Auth-Header required UUID Header used for authentication with the API"},{"location":"rest-references/#responses_8","title":"Responses","text":"http code content-type response 200 application/json [recipe.Category objects list] 403 application/json {\"detail\":\"You must use authentication header\"}"},{"location":"rest-references/#example-curl_8","title":"Example cURL","text":"
 curl --location 'host/api/recipe/category' --header 'X-Auth-Header: X_AUTH_HEADER'\n
"},{"location":"rest-references/#get-all-categories-recipes","title":"Get all categories recipes","text":"GET /api/recipe/category/int:pk/recipes"},{"location":"rest-references/#parameters_3","title":"Parameters","text":"name type data type description <int:pk> path (required) int Category primary key"},{"location":"rest-references/#headers_9","title":"Headers","text":"name type data type description X-Auth-Header required UUID Header used for authentication with the API"},{"location":"rest-references/#responses_9","title":"Responses","text":"http code content-type response 200 application/json [recipe.Recipe objects list] 403 application/json {\"detail\":\"You must use authentication header\"}"},{"location":"rest-references/#example-curl_9","title":"Example cURL","text":"
 curl --location 'host/api/recipe/category/1/recipes' --header 'X-Auth-Header: X_AUTH_HEADER'\n
"},{"location":"rest-references/#create-category","title":"Create category","text":"POST /api/recipe/category/add"},{"location":"rest-references/#payload_4","title":"Payload","text":"recipe.Category object
{\n    \"name\": string\n}\n
"},{"location":"rest-references/#headers_10","title":"Headers","text":"name type data type description Authorization required Access Token Token obtained from login endpoint example \"token 443c104be8c6daeeaf86df634e69b97668b99900\" Content-Type application/json `Applicaton Json content header"},{"location":"rest-references/#responses_10","title":"Responses","text":"http code content-type response 201 application/json {recipe.Category object} 400 application/json {\"tag\":[\"Incorrect type. message\"]} 401 application/json {\"detail\":\"Authentication credentials were not provided.\"}"},{"location":"rest-references/#example-curl_10","title":"Example cURL","text":"
 curl --location 'host/api/recipe/category/add' --header 'Authorization: token 443c104be8c6daeeaf86df634e69b97668b99900' --data '{\"name\":\"Greek\"}'\n
"},{"location":"rest-references/#update-category","title":"Update category","text":"PUT /api/recipe/category/int:pk"},{"location":"rest-references/#payload_5","title":"Payload","text":"recipe.Category object
{\n    \"name\": string,\n\n}\n
"},{"location":"rest-references/#parameters_4","title":"Parameters","text":"name type data type description <int:pk> path (required) int Category primary key"},{"location":"rest-references/#headers_11","title":"Headers","text":"name type data type description Authorization required Access Token Token obtained from login endpoint example \"token 443c104be8c6daeeaf86df634e69b97668b99900\" Content-Type application/json `Applicaton Json content header"},{"location":"rest-references/#responses_11","title":"Responses","text":"http code content-type response 200 application/json {recipe.Recipe object} 401 application/json {\"detail\":\"Authentication credentials were not provided.\"} 404 application/json {\"detail\":\"No Category matches the given query.\"}"},{"location":"rest-references/#example-curl_11","title":"Example cURL","text":"
 curl --location --request PUT 'host/api/recipe/category/6' --header 'Authorization: token 443c104be8c6daeeaf86df634e69b97668b99900'  --header 'Content-Type: application/json'  --data '{\"name\":\"Italiano\"}'\n
"},{"location":"rest-references/#tag","title":"Tag","text":""},{"location":"rest-references/#get-all-tags","title":"Get all tags","text":"GET /api/recipe/tags"},{"location":"rest-references/#headers_12","title":"Headers","text":"name type data type description X-Auth-Header required UUID Header used for authentication with the API"},{"location":"rest-references/#responses_12","title":"Responses","text":"http code content-type response 200 application/json [recipe.Tag objects list] 403 application/json {\"detail\":\"You must use authentication header\"}"},{"location":"rest-references/#example-curl_12","title":"Example cURL","text":"
 curl --location 'host/api/recipe/tags' --header 'X-Auth-Header: X_AUTH_HEADER'\n
"},{"location":"rest-references/#get-all-recipes-from-tag","title":"Get all recipes from tag","text":"GET /api/recipe/tag/int:pk/recipes"},{"location":"rest-references/#parameters_5","title":"Parameters","text":"name type data type description <int:pk> path (required) int Tag primary key"},{"location":"rest-references/#headers_13","title":"Headers","text":"name type data type description X-Auth-Header required UUID Header used for authentication with the API"},{"location":"rest-references/#responses_13","title":"Responses","text":"http code content-type response 200 application/json {\"count\":int,\"next\":string,\"previous\":string,\"results\":[recipe.Recipe obj list]} 403 application/json {\"detail\":\"You must use authentication header\"}"},{"location":"rest-references/#example-curl_13","title":"Example cURL","text":"
 curl --location 'host/api/recipe/tag/<int:pk>/recipes' --header 'X-Auth-Header: X_AUTH_HEADER'\n
"},{"location":"rest-references/#create-tag","title":"Create tag","text":"POST /api/recipe/tag/add"},{"location":"rest-references/#payload_6","title":"Payload","text":"recipe.Tag object
{\n    \"name\": string\n}\n
"},{"location":"rest-references/#headers_14","title":"Headers","text":"name type data type description Authorization required Access Token Token obtained from login endpoint example \"token 443c104be8c6daeeaf86df634e69b97668b99900\" Content-Type application/json `Applicaton Json content header"},{"location":"rest-references/#responses_14","title":"Responses","text":"http code content-type response 201 application/json {recipe.Category object} 400 application/json {\"tag\":[\"Incorrect type. message\"]} 401 application/json {\"detail\":\"Authentication credentials were not provided.\"}"},{"location":"rest-references/#example-curl_14","title":"Example cURL","text":"
 curl --location 'host/api/recipe/tag/add' --header 'Authorization: token 443c104be8c6daeeaf86df634e69b97668b99900' --data '{\"name\":\"Summer vibes\"}'\n
"},{"location":"rest-references/#update-tag","title":"Update tag","text":"PUT /api/recipe/tag/int:pk"},{"location":"rest-references/#payload_7","title":"Payload","text":"recipe.Category object
{\n    \"name\": string,\n\n}\n
"},{"location":"rest-references/#parameters_6","title":"Parameters","text":"name type data type description <int:pk> path (required) int Tag primary key"},{"location":"rest-references/#headers_15","title":"Headers","text":"name type data type description Authorization required Access Token Token obtained from login endpoint example \"token 443c104be8c6daeeaf86df634e69b97668b99900\" Content-Type application/json `Applicaton Json content header"},{"location":"rest-references/#responses_15","title":"Responses","text":"http code content-type response 200 application/json {recipe.Tag object} 401 application/json {\"detail\":\"Authentication credentials were not provided.\"} 404 application/json {\"detail\":\"No Category matches the given query.\"}"},{"location":"rest-references/#example-curl_15","title":"Example cURL","text":"
 curl --location --request PUT 'host/api/recipe/tag/1' --header 'Authorization: token 443c104be8c6daeeaf86df634e69b97668b99900'  --header 'Content-Type: application/json'  --data '{\"name\":\"Summer Vibes\"}'\n
"},{"location":"rest-references/#ingredients","title":"Ingredients","text":"POST /api/recipe/int:pk/ingredients"},{"location":"rest-references/#payload_8","title":"Payload","text":"recipe.Igredient object list
[\n    {\n        \"name\": \"string,\n        \"quantity\": string,\n        \"metric\": \"string\n    },\n    {\n        \"name\": \"string,\n        \"quantity\": string,\n        \"metric\": \"string\n    },\n....\n]\n
"},{"location":"rest-references/#parameters_7","title":"Parameters","text":"name type data type description <int:pk> path (required) int Recipe primary key to which to link the ingredients"},{"location":"rest-references/#headers_16","title":"Headers","text":"name type data type description Authorization required Access Token Token obtained from login endpoint example \"token 443c104be8c6daeeaf86df634e69b97668b99900\" Content-Type application/json `Applicaton Json content header"},{"location":"rest-references/#responses_16","title":"Responses","text":"http code content-type response 201 application/json [{recipe.Ingrediant object}] 400 application/json {\"tag\":[\"Incorrect type. message\"]} 401 application/json {\"detail\":\"Authentication credentials were not provided.\"}"},{"location":"rest-references/#example-curl_16","title":"Example cURL","text":"
 curl --location 'host/api/recipe/ingredients' --header 'Authorization: token 443c104be8c6daeeaf86df634e69b97668b99900' --data '[{\"name\":\"Kasher salt\",\"quantity\":\"1/5\",\"metric\":\"tbsp\",\"recipe\":24}]'\n
"},{"location":"rest-references/#steps","title":"Steps","text":"POST /api/recipe/int:pk/steps"},{"location":"rest-references/#payload_9","title":"Payload","text":"recipe.Step object list
[\n    {\n        \"text\": string\n    },\n    {\n        \"text\": string\n    },\n....\n]\n
"},{"location":"rest-references/#parameters_8","title":"Parameters","text":"name type data type description <int:pk> path (required) int Recipe primary key to which to link the steps"},{"location":"rest-references/#headers_17","title":"Headers","text":"name type data type description Authorization required Access Token Token obtained from login endpoint example \"token 443c104be8c6daeeaf86df634e69b97668b99900\" Content-Type application/json `Applicaton Json content header"},{"location":"rest-references/#responses_17","title":"Responses","text":"http code content-type response 201 application/json [{recipe.Step object}] 400 application/json {\"tag\":[\"Incorrect type. message\"]} 401 application/json {\"detail\":\"Authentication credentials were not provided.\"}"},{"location":"rest-references/#example-curl_17","title":"Example cURL","text":"
 curl --location 'host/api/recipe/ingredients' --header 'Authorization: token 443c104be8c6daeeaf86df634e69b97668b99900' --data '[{\"text\":\"Heat the oven\",\"recipe\":1}]'\n
"},{"location":"user-guide/","title":"User Guide","text":"

The documentation for ForkAPI contains number of sections that are listed bellow.

  • Installation
  • Make your first request
  • Rest documentation
  • Contribution
"}]} \ No newline at end of file +{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"ForkAPI","text":""},{"location":"#a-lightweight-restapi-client-that-manage-food-recipies-easily","title":"A lightweight RestAPI client that manage food recipies easily","text":"

ForkAPI is a Django drf based project which can be easily integrated as a backend service for a mobile application or web application that can display, add, favorite a food recipies. The api is designed to be simple to use with build in Dashboard panel to add recipies manual or using the provided endpoints (views in Django).

You can benefit for future support of the project.

Get Started Installation

"},{"location":"Installation/","title":"Installation","text":"

To install the API you need a Python 3.x installed also venv module and pip. Here will be covered two types of installation for debugging and for production.

"},{"location":"Installation/#mutual-steps","title":"Mutual Steps","text":"

Clone the repository with the command

$ git clone https://github.com/mikebgrep/forkapi\n
Rename .env.example to .env In linux
$ cd forkapi\n$ mv .env.example .env \n
Enter the environment variables in .env file.

  • PAGINATION_PAGE_SIZE is used for pagination used in the API certain endpoint.
  • DJANGO_SECRET you can generate the secret online -> link or with the following command if you have installed django on the machine
    $ python -c 'from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())'\n
  • X_AUTH_HEADER also you can generate random UUID online that will be used for authentication for the read only endpoint. Example header 261ec18d-0e81-4073-8d9e-b34a7a1e5e06 (Don`t use it this is for demo purpose)
"},{"location":"Installation/#installing-locally-debug-mode","title":"Installing locally (Debug mode)","text":"

You can create a virtual environment and click of the API. Note replace the 3.x with actual Python version

$ python3.x -m venv .venv && source .venv/bin/activate\n$ pip install -r requirements.txt\n

Make the needed migrations so Django can create sqlite database file with tables.

$ cd forkapi\n$ python manage.py makemigrations authentication\n$ python manage.py makemigrations recipe\n$ python manage.py migrate\n

At this point everything should be ok, and you can start the server.

$ python manage.py runserver\n
You can access the dashboard admin panel on localhost:8000. In this mode you can use it locally if in debug mode which you can change in /forkapi/settings.py file line 27

"},{"location":"Installation/#installing-in-docker-container-production","title":"Installing in Docker container (Production)","text":"

To installing in Docker container follow the steps bellow. For Raspberry Pi with Raspbian OS make sure to uncomment the packages in the main Dockerfile on line 16

  • First steps is setting up the fullchain.pem and privkey.pem files needed for the ssl settings in nginx used as reverse proxy.
  • After you obtain ssl certificates for your domain you need to copy them in the nginx/ssl folder.
  • Replace the localhost value for server_name on lines 8 and 14 with your actual domain name in the forkapi/forkapi.nginx.conf configuration file.
  • That all you need to run the docker compose command and the API will be deployed on the server instance or locally on your machine.

    Depends of the available package\n\n$ docker compose up\n\nor \n\n$ docker-compose up\n

  • Access the admin dashboard at your-domain:80 or your-domain:443

Info

I will not include steps for setting the domain name servers on this as you can follow the official documentation on your server or the Raspberry Pi documentation.

Follow next step to check how you can and must made your first request.

"},{"location":"contribution/","title":"Contribution","text":"

Any contribution is welcomed and here the instructions to do so:

  1. Fork the repository
  2. Work on master branch if the changes are not major or create a new branch for major updates
  3. Make your changes and open pull request

Info

For major futures you can open a issue first and then branch that should be named future/name-of-the-change

"},{"location":"contribution/#desired-modifications","title":"Desired modifications","text":"

Note

If you decide to contribute and you have experience with Django a good starting point will be to rework the Django Admin Panel with more fancy look and feel.

"},{"location":"first-request/","title":"Make your first request","text":"

After the API is deployed you need to create a superuser for the admin dashboard. This can be done ether with Django manage.py python manage.py createsuperuser command or using an API Client as Postman or curl CLI tool.

I will present the method with the curl as more convenient method but you can use and Postman.

"},{"location":"first-request/#creating-superuser","title":"Creating superuser","text":"

To create a superuser for login into the Admin Dashboard use the following curl command in you terminal or powershell.

curl --location --request POST --header \"Content-type: application/json\" --header \"X-Auth-Header: X_AUTH_HEADER\"  --data-raw '{\"username\":\"your-username\",\"password\":\"you-password\", \"is_superuser\": true}' 'https://your-domain-name/api/auth/signup'\n
Take a note that you need to change

  • X_AUTH_HEADER with the value from .env file
  • your-username and your-password with valid data
  • https://your-domain-name with actual domain name

When you execute the curl command the admin user will be created you can log in to the admin dashboard from the base url of the api (the domain name).

"},{"location":"rest-references/","title":"Rest Reference","text":""},{"location":"rest-references/#restapi-reference","title":"RestAPI reference","text":""},{"location":"rest-references/#on-this-page-you-can-check-the-restapi-endpoints","title":"On this page you can check the RestAPI endpoints.","text":"

Note

The API has build in csrf protection you may need to attach Cookie with value csrftoken=token to work proparly

"},{"location":"rest-references/#authentication","title":"Authentication","text":""},{"location":"rest-references/#create-admin-user","title":"Create admin user","text":"POST /api/auth/signup"},{"location":"rest-references/#payload","title":"Payload","text":"authentication.UserSerializer
{\n    \"username\": \"username\",\n    \"password\": \"password\",\n    \"is_superuser\": true\n}\n
"},{"location":"rest-references/#headers","title":"Headers","text":"name type data type description X-Auth-Header required UUID Header used for authentication with the API"},{"location":"rest-references/#responses","title":"Responses","text":"http code content-type response 201 application/json User created successfully 400 application/json {\"username\":[\"user with this username already exists.\"]}"},{"location":"rest-references/#example-curl","title":"Example cURL","text":"
 curl --location 'host/api/auth/signup' --header 'X-Auth-Header: X_AUTH_HEADER' --header 'Content-Type: application/json' --data '{\"username\":\"username\",\"password\":\"password\",\"is_superuser\":true}'\n
"},{"location":"rest-references/#obtain-access-token","title":"Obtain access token","text":"POST /api/auth/token"},{"location":"rest-references/#payload_1","title":"Payload","text":"authentication.UserSerializer
{\n    \"username\": \"username\",\n    \"password\": \"password\"\n}\n
"},{"location":"rest-references/#headers_1","title":"Headers","text":"name type data type description X-Auth-Header required UUID Header used for authentication with the API"},{"location":"rest-references/#responses_1","title":"Responses","text":"http code content-type response 200 application/json {\"token\":\"token\",\"user\":{\"username\":\"username\",\"is_superuser\":true}} 404 application/json {\"detail\":\"No User matches the given query.\"} 403 application/json {\"detail\": \"You must use authentication header\"}"},{"location":"rest-references/#example-curl_1","title":"Example cURL","text":"
 `curl --location 'host/api/auth/token' --header 'X-Auth-Header: X_AUTH_HEADER' --header 'Content-Type: application/json' --data '{\"username\":\"username\",\"password\":\"password\"}''\n
"},{"location":"rest-references/#recipe","title":"Recipe","text":""},{"location":"rest-references/#search-for-recipes","title":"Search for recipes","text":"GET /api/recipe/home/"},{"location":"rest-references/#parameters","title":"Parameters","text":"name type data type description name query (optional) string Part or fulll name of the recipe.Recipe object page query (optional) int Page number if there a mutilple pages result"},{"location":"rest-references/#headers_2","title":"Headers","text":"name type data type description X-Auth-Header required UUID Header used for authentication with the API"},{"location":"rest-references/#responses_2","title":"Responses","text":"http code content-type response 200 application/json {\"count\":int,\"next\":string,\"previous\":string,\"results\":[recipe.Recipe obj list]} 403 application/json {\"detail\":\"You must use authentication header\"}"},{"location":"rest-references/#example-curl_2","title":"Example cURL","text":"
 curl --location 'http://host:port/api/recipe/home/?name=name&page=1' --header 'X-Auth-Header: X_AUTH_HEADER\n
"},{"location":"rest-references/#get-favorite-recipes","title":"Get favorite recipes","text":"GET /api/recipe/home/favorites"},{"location":"rest-references/#headers_3","title":"Headers","text":"name type data type description X-Auth-Header required UUID Header used for authentication with the API"},{"location":"rest-references/#responses_3","title":"Responses","text":"http code content-type response 200 application/json {\"count\":int,\"next\":string,\"previous\":string,\"results\":[recipe.Recipe obj list]} 404 application/json {\"detail\":\"No Recipe matches the given query.\"} 403 application/json {\"detail\":\"You must use authentication header\"}"},{"location":"rest-references/#example-curl_3","title":"Example cURL","text":"
 curl --location 'http://host:port/api/recipe/home/favorites/' --header 'X-Auth-Header: X_AUTH_HEADER\n
"},{"location":"rest-references/#get-trending-recipes","title":"Get trending recipes","text":"GET /api/recipe/trending"},{"location":"rest-references/#headers_4","title":"Headers","text":"name type data type description X-Auth-Header required UUID Header used for authentication with the API"},{"location":"rest-references/#responses_4","title":"Responses","text":"http code content-type response 200 application/json [recipe.Recipe objects list] 403 application/json {\"detail\":\"You must use authentication header\"}"},{"location":"rest-references/#example-curl_4","title":"Example cURL","text":"
 curl --location 'localhost:8080/api/recipe/trending' --header 'X-Auth-Header: X_AUTH_HEADER\n
"},{"location":"rest-references/#update-favorite-status","title":"Update favorite status","text":"PATCH /api/recipe/int:pk/favorite"},{"location":"rest-references/#parameters_1","title":"Parameters","text":"name type data type description <int:pk> path (required) int Recipe primary key to be favorited or unfavorited"},{"location":"rest-references/#headers_5","title":"Headers","text":"name type data type description Authorization required Access Token Token obtained from login endpoint example \"token 443c104be8c6daeeaf86df634e69b97668b99900\""},{"location":"rest-references/#responses_5","title":"Responses","text":"http code content-type response 201 application/json \"Success favorite recipe\" 201 application/json \"Success unfavorite recipe\" 403 application/json `{\"detail\":\"You must use authentication header\"} 404 application/json Not Found"},{"location":"rest-references/#example-curl_5","title":"Example cURL","text":"
 curl --location --request PATCH 'host/api/recipe/1/favorite' --header 'X-Auth-Header: X_AUTH_HEADER'\n
"},{"location":"rest-references/#create-recipe","title":"Create recipe","text":"POST /api/recipe/"},{"location":"rest-references/#payload_2","title":"Payload","text":"recipe.Recipe object
{\n    \"image\": file,\n    \"name\": string,\n    \"serves\": int,\n    \"video\": file (optional),\n    \"category\": <int:pk>,\n    \"tag\": <int:pk>,\n    \"prep_time\": int,\n}\n
"},{"location":"rest-references/#headers_6","title":"Headers","text":"name type data type description Authorization required Access Token Token obtained from login endpoint example \"token 443c104be8c6daeeaf86df634e69b97668b99900\" Content-Type multipart/form-data Recipe object Recipe multipart/form-data object"},{"location":"rest-references/#responses_6","title":"Responses","text":"http code content-type response 201 application/json {recipe.Recipe object} 400 application/json {\"tag\":[\"Incorrect type. message\"]} 401 application/json {\"detail\":\"Authentication credentials were not provided.\"}"},{"location":"rest-references/#example-curl_6","title":"Example cURL","text":"
 curl --location 'localhost:8080/api/recipe/'  --header 'Authorization: Token d8916a5f6cf16d2c6a87bc7461bc4680245609f0' --form 'image=@\"/path/image.jpg\"' --form 'name=\"Test recipe creation\"' --form 'serves=\"5\"' --form 'category=\"1\"' --form 'tag=1' --form 'prep_time=\"45\"'\n
"},{"location":"rest-references/#update-recipe-main-info-without-ingredients-and-steps","title":"Update recipe main info (without ingredients and steps)","text":"PUT /api/recipe/int:pk"},{"location":"rest-references/#payload_3","title":"Payload","text":"recipe.Recipe object
{\n    \"image\": file,\n    \"name\": string,\n    \"serves\": int,\n    \"video\": file (optional),\n    \"category\": <int:pk>,\n    \"tag\": <int:pk>,\n    \"prep_time\": int,\n}\n
"},{"location":"rest-references/#parameters_2","title":"Parameters","text":"name type data type description <int:pk> path (required) int Recipe primary key to be updated"},{"location":"rest-references/#headers_7","title":"Headers","text":"name type data type description Authorization required Access Token Token obtained from login endpoint example \"token 443c104be8c6daeeaf86df634e69b97668b99900\" Content-Type multipart/form-data Recipe object Recipe multipart/form-data object"},{"location":"rest-references/#responses_7","title":"Responses","text":"http code content-type response 200 application/json {recipe.Recipe object} 400 application/json {\"tag\":[\"Incorrect type. message\"]} 401 application/json {\"detail\":\"Authentication credentials were not provided.\"}"},{"location":"rest-references/#example-curl_7","title":"Example cURL","text":"
 curl --location --request PUT 'host/api/recipe/1' --header 'Authorization: Token d8916a5f6cf16d2c6a87bc7461bc4680245609f0' --form 'image=@\"/path/image.jpg\"' --form 'name=\"Update name\"' --form 'serves=\"4\"' --form 'category=\"1\"' --form 'tag=\"1\"' --form 'prep_time=\"21\"'\n
"},{"location":"rest-references/#category","title":"Category","text":""},{"location":"rest-references/#get-all-categories","title":"Get all categories","text":"GET /api/recipe/trending"},{"location":"rest-references/#headers_8","title":"Headers","text":"name type data type description X-Auth-Header required UUID Header used for authentication with the API"},{"location":"rest-references/#responses_8","title":"Responses","text":"http code content-type response 200 application/json [recipe.Category objects list] 403 application/json {\"detail\":\"You must use authentication header\"}"},{"location":"rest-references/#example-curl_8","title":"Example cURL","text":"
 curl --location 'host/api/recipe/category' --header 'X-Auth-Header: X_AUTH_HEADER'\n
"},{"location":"rest-references/#get-all-categories-recipes","title":"Get all categories recipes","text":"GET /api/recipe/category/int:pk/recipes"},{"location":"rest-references/#parameters_3","title":"Parameters","text":"name type data type description <int:pk> path (required) int Category primary key"},{"location":"rest-references/#headers_9","title":"Headers","text":"name type data type description X-Auth-Header required UUID Header used for authentication with the API"},{"location":"rest-references/#responses_9","title":"Responses","text":"http code content-type response 200 application/json [recipe.Recipe objects list] 403 application/json {\"detail\":\"You must use authentication header\"}"},{"location":"rest-references/#example-curl_9","title":"Example cURL","text":"
 curl --location 'host/api/recipe/category/1/recipes' --header 'X-Auth-Header: X_AUTH_HEADER'\n
"},{"location":"rest-references/#create-category","title":"Create category","text":"POST /api/recipe/category/add"},{"location":"rest-references/#payload_4","title":"Payload","text":"recipe.Category object
{\n    \"name\": string\n}\n
"},{"location":"rest-references/#headers_10","title":"Headers","text":"name type data type description Authorization required Access Token Token obtained from login endpoint example \"token 443c104be8c6daeeaf86df634e69b97668b99900\" Content-Type application/json `Applicaton Json content header"},{"location":"rest-references/#responses_10","title":"Responses","text":"http code content-type response 201 application/json {recipe.Category object} 400 application/json {\"tag\":[\"Incorrect type. message\"]} 401 application/json {\"detail\":\"Authentication credentials were not provided.\"}"},{"location":"rest-references/#example-curl_10","title":"Example cURL","text":"
 curl --location 'host/api/recipe/category/add' --header 'Authorization: token 443c104be8c6daeeaf86df634e69b97668b99900' --data '{\"name\":\"Greek\"}'\n
"},{"location":"rest-references/#update-category","title":"Update category","text":"PUT /api/recipe/category/int:pk"},{"location":"rest-references/#payload_5","title":"Payload","text":"recipe.Category object
{\n    \"name\": string,\n\n}\n
"},{"location":"rest-references/#parameters_4","title":"Parameters","text":"name type data type description <int:pk> path (required) int Category primary key"},{"location":"rest-references/#headers_11","title":"Headers","text":"name type data type description Authorization required Access Token Token obtained from login endpoint example \"token 443c104be8c6daeeaf86df634e69b97668b99900\" Content-Type application/json `Applicaton Json content header"},{"location":"rest-references/#responses_11","title":"Responses","text":"http code content-type response 200 application/json {recipe.Recipe object} 401 application/json {\"detail\":\"Authentication credentials were not provided.\"} 404 application/json {\"detail\":\"No Category matches the given query.\"}"},{"location":"rest-references/#example-curl_11","title":"Example cURL","text":"
 curl --location --request PUT 'host/api/recipe/category/6' --header 'Authorization: token 443c104be8c6daeeaf86df634e69b97668b99900'  --header 'Content-Type: application/json'  --data '{\"name\":\"Italiano\"}'\n
"},{"location":"rest-references/#tag","title":"Tag","text":""},{"location":"rest-references/#get-all-tags","title":"Get all tags","text":"GET /api/recipe/tags"},{"location":"rest-references/#headers_12","title":"Headers","text":"name type data type description X-Auth-Header required UUID Header used for authentication with the API"},{"location":"rest-references/#responses_12","title":"Responses","text":"http code content-type response 200 application/json [recipe.Tag objects list] 403 application/json {\"detail\":\"You must use authentication header\"}"},{"location":"rest-references/#example-curl_12","title":"Example cURL","text":"
 curl --location 'host/api/recipe/tags' --header 'X-Auth-Header: X_AUTH_HEADER'\n
"},{"location":"rest-references/#get-all-recipes-from-tag","title":"Get all recipes from tag","text":"GET /api/recipe/tag/int:pk/recipes"},{"location":"rest-references/#parameters_5","title":"Parameters","text":"name type data type description <int:pk> path (required) int Tag primary key"},{"location":"rest-references/#headers_13","title":"Headers","text":"name type data type description X-Auth-Header required UUID Header used for authentication with the API"},{"location":"rest-references/#responses_13","title":"Responses","text":"http code content-type response 200 application/json {\"count\":int,\"next\":string,\"previous\":string,\"results\":[recipe.Recipe obj list]} 403 application/json {\"detail\":\"You must use authentication header\"}"},{"location":"rest-references/#example-curl_13","title":"Example cURL","text":"
 curl --location 'host/api/recipe/tag/<int:pk>/recipes' --header 'X-Auth-Header: X_AUTH_HEADER'\n
"},{"location":"rest-references/#create-tag","title":"Create tag","text":"POST /api/recipe/tag/add"},{"location":"rest-references/#payload_6","title":"Payload","text":"recipe.Tag object
{\n    \"name\": string\n}\n
"},{"location":"rest-references/#headers_14","title":"Headers","text":"name type data type description Authorization required Access Token Token obtained from login endpoint example \"token 443c104be8c6daeeaf86df634e69b97668b99900\" Content-Type application/json `Applicaton Json content header"},{"location":"rest-references/#responses_14","title":"Responses","text":"http code content-type response 201 application/json {recipe.Category object} 400 application/json {\"tag\":[\"Incorrect type. message\"]} 401 application/json {\"detail\":\"Authentication credentials were not provided.\"}"},{"location":"rest-references/#example-curl_14","title":"Example cURL","text":"
 curl --location 'host/api/recipe/tag/add' --header 'Authorization: token 443c104be8c6daeeaf86df634e69b97668b99900' --data '{\"name\":\"Summer vibes\"}'\n
"},{"location":"rest-references/#update-tag","title":"Update tag","text":"PUT /api/recipe/tag/int:pk"},{"location":"rest-references/#payload_7","title":"Payload","text":"recipe.Category object
{\n    \"name\": string,\n\n}\n
"},{"location":"rest-references/#parameters_6","title":"Parameters","text":"name type data type description <int:pk> path (required) int Tag primary key"},{"location":"rest-references/#headers_15","title":"Headers","text":"name type data type description Authorization required Access Token Token obtained from login endpoint example \"token 443c104be8c6daeeaf86df634e69b97668b99900\" Content-Type application/json `Applicaton Json content header"},{"location":"rest-references/#responses_15","title":"Responses","text":"http code content-type response 200 application/json {recipe.Tag object} 401 application/json {\"detail\":\"Authentication credentials were not provided.\"} 404 application/json {\"detail\":\"No Category matches the given query.\"}"},{"location":"rest-references/#example-curl_15","title":"Example cURL","text":"
 curl --location --request PUT 'host/api/recipe/tag/1' --header 'Authorization: token 443c104be8c6daeeaf86df634e69b97668b99900'  --header 'Content-Type: application/json'  --data '{\"name\":\"Summer Vibes\"}'\n
"},{"location":"rest-references/#ingredients","title":"Ingredients","text":"POST /api/recipe/int:pk/ingredients"},{"location":"rest-references/#payload_8","title":"Payload","text":"recipe.Igredient object list
[\n    {\n        \"name\": \"string,\n        \"quantity\": string,\n        \"metric\": \"string\n    },\n    {\n        \"name\": \"string,\n        \"quantity\": string,\n        \"metric\": \"string\n    },\n....\n]\n
"},{"location":"rest-references/#parameters_7","title":"Parameters","text":"name type data type description <int:pk> path (required) int Recipe primary key to which to link the ingredients"},{"location":"rest-references/#headers_16","title":"Headers","text":"name type data type description Authorization required Access Token Token obtained from login endpoint example \"token 443c104be8c6daeeaf86df634e69b97668b99900\" Content-Type application/json `Applicaton Json content header"},{"location":"rest-references/#responses_16","title":"Responses","text":"http code content-type response 201 application/json [{recipe.Ingrediant object}] 400 application/json {\"tag\":[\"Incorrect type. message\"]} 401 application/json {\"detail\":\"Authentication credentials were not provided.\"}"},{"location":"rest-references/#example-curl_16","title":"Example cURL","text":"
 curl --location 'host/api/recipe/ingredients' --header 'Authorization: token 443c104be8c6daeeaf86df634e69b97668b99900' --data '[{\"name\":\"Kasher salt\",\"quantity\":\"1/5\",\"metric\":\"tbsp\",\"recipe\":24}]'\n
"},{"location":"rest-references/#steps","title":"Steps","text":"POST /api/recipe/int:pk/steps"},{"location":"rest-references/#payload_9","title":"Payload","text":"recipe.Step object list
[\n    {\n        \"text\": string\n    },\n    {\n        \"text\": string\n    },\n....\n]\n
"},{"location":"rest-references/#parameters_8","title":"Parameters","text":"name type data type description <int:pk> path (required) int Recipe primary key to which to link the steps"},{"location":"rest-references/#headers_17","title":"Headers","text":"name type data type description Authorization required Access Token Token obtained from login endpoint example \"token 443c104be8c6daeeaf86df634e69b97668b99900\" Content-Type application/json `Applicaton Json content header"},{"location":"rest-references/#responses_17","title":"Responses","text":"http code content-type response 201 application/json [{recipe.Step object}] 400 application/json {\"tag\":[\"Incorrect type. message\"]} 401 application/json {\"detail\":\"Authentication credentials were not provided.\"}"},{"location":"rest-references/#example-curl_17","title":"Example cURL","text":"
 curl --location 'host/api/recipe/ingredients' --header 'Authorization: token 443c104be8c6daeeaf86df634e69b97668b99900' --data '[{\"text\":\"Heat the oven\",\"recipe\":1}]'\n
"},{"location":"user-guide/","title":"User Guide","text":"

The documentation for ForkAPI contains number of sections that are listed bellow.

  • Installation
  • Make your first request
  • Rest documentation
  • Contribution
"}]} \ No newline at end of file diff --git a/sitemap.xml b/sitemap.xml index 5bdf582..4a16f9b 100644 --- a/sitemap.xml +++ b/sitemap.xml @@ -2,26 +2,26 @@ https://mikebgrep.github.io/forkapi/ - 2024-11-02 + 2024-11-03 https://mikebgrep.github.io/forkapi/Installation/ - 2024-11-02 + 2024-11-03 https://mikebgrep.github.io/forkapi/contribution/ - 2024-11-02 + 2024-11-03 https://mikebgrep.github.io/forkapi/first-request/ - 2024-11-02 + 2024-11-03 https://mikebgrep.github.io/forkapi/rest-references/ - 2024-11-02 + 2024-11-03 https://mikebgrep.github.io/forkapi/user-guide/ - 2024-11-02 + 2024-11-03 \ No newline at end of file diff --git a/sitemap.xml.gz b/sitemap.xml.gz index af70b75f986479c5982c19ec1b15666420741c5a..937f5548fbf3fd4dd24bf2e5a1bdb46c47a1757d 100644 GIT binary patch literal 253 zcmV${!nUJ7D<+2(lg0`Mo~AWhSX!I3i&RYLzZeaxbL>AT7DfG>;IKJj(nHMif@|fL|)L+!Ipx<6ZUX=S DiFJDm literal 253 zcmVEP|aGY9GJoZknF=;#^=RKmY%QKz;t1UG@z~Huy%AvJe^gJ`C2IMtojB@>g+g zPjy5`z*!P|YQ)66yeqY?t0c=X>xE=Mqo|)!L+UY9g?tn3DND5(+;@A`F7)l@Ldj;f zH|Pw)B8}xKcG3nl2E6ITs#&Jn&M5FdkpuoH}c=|ut^0}%-@H_;C8eEz