Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Initial docs update #83

Merged
merged 1 commit into from
Sep 20, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 4 additions & 5 deletions docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,13 +44,12 @@ To read about the detailed architecture, you can read [here](https://sansyrox.gi

## To Run

1. Add more routes in the test.py file(if you like). It only supports only get requests at the moment
### Without hot reloading
`python3 app.py`

2. Run `maturin develop`
### With hot reloading
`python3 app.py --dev=true`

3. Run `python3 test.py`

4. To measure the performance: `./server_test.sh`

## Contributors/Supporters

Expand Down
3 changes: 3 additions & 0 deletions docs/_sidebar.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
<!-- docs/_sidebar.md -->

- [Home](/)
- [API](api.md)
- [Architecture](architecture.md)
- [Comparison](comparison.md)
- [Plugins](plugins.md)
142 changes: 142 additions & 0 deletions docs/api.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
# API Usage

## Getting Started

```python

from robyn import Robyn

app = Robyn(__file__)

@app.get("/")
async def h():
return "Hello, world!"

app.start()

```

Let us try to decipher the usage line by line.

> from robyn import Robyn

This statement just imports the Robyn structure from the robyn package.

> app = Robyn(__file__)

Here, we are creating the app object. We require the `__file__` object to mount the directory for hot reloading.

## Running the service

You can just use the command

```
python3 app.py
```

if you want to run the production version, and

```
python3 app.py --dev=true
```
if you want to enable hot reloading or the development version.

## Serving an HTTP Request


Robyn supports both sync methods and async methods for fetching requests. Every method gets a request object from the routing decorator.

The request object contains the `body` in PUT/POST/PATCH. The `header`s are available in every request object.

Robyn supports every HTTP request method. The examples of some of them are below:
### GET Request

```python3
@app.get("/")
async def h(request):
return "Hello World"
```

### POST Request

```python3
@app.post("/post")
async def postreq(request):
return bytearray(request["body"]).decode("utf-8")
```

### PUT Request

```python3
@app.put("/put")
async def postreq(request):
return bytearray(request["body"]).decode("utf-8")
```


### PATCH Request
```python3
@app.patch("/patch")
async def postreq(request):
return bytearray(request["body"]).decode("utf-8")
```


### DELETE Request
```python3
@app.delete("/delete")
async def postreq(request):
return bytearray(request["body"]).decode("utf-8")
```



## Returning a JSON Response
You can also serve JSON responses when serving HTTP request using the following way.

```python3
from robyn import jsonify

@app.post("/jsonify")
async def json(request):
print(request)
return jsonify({"hello": "world"})
```

### Serving a Directory
You can also use robyn to serve a directory. An example use case of this method would be when you want to build and serve a react/vue/angular/vanilla js app.

You would type the following command to generate the build directory.
```
yarn build
```

and you can then add the following method in your robyn app.

```python3
app.add_directory(route="/react_app_serving",directory_path="./build", index_file="index.html")

```


### Serving a Static File

If you don't want to serve static directory and want to just serve static_files, you can use the following method.
```python3
from robyn import Robyn, static_file

@app.get("/test")
async def test():
return static_file("index.html")

```

### Serving Headers
You can also add global headers for every request.

```python3
app.add_header("server", "robyn")

```

To see a complete service in action, you can go to the folder [../test_python/test.py](../test_python/test.py)
4 changes: 4 additions & 0 deletions docs/architecture.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
## Architecture Design

Robyn is a Python web server that uses the tokio runtime. Below is a little outdated architecture of robyn but it still serves the purpose.

*Latest architecture diagram will be updated within a few weeks*

![Diagram](https://i.ibb.co/cNV4DJX/image.png)

![Diagram of the final Architecture](https://i.ibb.co/GHwTTqk/Untitled-2021-02-25-0125-1.png)
Loading