- v3.0.0-beta.2Latest
- v3.0.0-beta.1
- v3.0.0-preview.4
- v2.8.1
- v2.7.1
- v2.7.0
- v2.6.0
- v2.5.4
- v2.5.3
- v2.5.2
- v2.5.1
- v2.5.0
- v2.4.0
- v2.3.0
- v2.2.0
- v2.1.0
- v2.0.0
- v2.0.0-rc-2
- v2.0.1-rc-1
- v2.0.0-beta-1
- v2.0.0-beta
- v1.5.1
- v1.5.0
- v1.4.4
- v1.4.3
- v1.4.2
- v1.4.1
- v1.4.0
- v1.3.1
- v1.3.0
- v1.2.5
- v1.2.4
- v1.2.3
- v1.2.2
- v1.2.1
- v1.2.0
- v1.1.1
- v1.1.0
- v1.0.8
- v1.0.7
- v1.0.6
- v1.0.5
- v1.0.4
- v1.0.3
- v1.0.2
- v1.0.1
- v1.0.0
- v1.0.0-rc1
- v0.42.0
- v0.41.1
- v0.41.0
- v0.39.6
- v0.39.5
- v0.39.4
- v0.39.3
- v0.39.2
- v0.39.1
- v0.39.0
- v0.38.0
- v0.37.1
- v0.37.0
- v0.36.0
- v0.35.2
- v0.35.1
- v0.35.0
- v0.34.0
- v0.33.1
- v0.33.0
- v0.32.0
- v0.31.3
- v0.31.2
- v0.31.1
- v0.31.0
- v0.30.1
- v0.30.0
- v0.29.0
- v0.28.3
- v0.28.2
- v0.28.1
- v0.28.0
- v0.27.6
- v0.27.5
- v0.27.4
- v0.27.3
- v0.27.2
- v0.27.1
- v0.27.0
- v0.26.0
- v0.25.0
- v0.24.1
- v0.24.0
- v0.23.0
- v0.22.2
- v0.22.1
- v0.22.0
- v0.21.0
- v0.20.1
- v0.20.0
- v0.19.1
- v0.19.0
- v0.18.1
- v0.18.0
- v0.17.0
- v0.16.2
- v0.16.1
- v0.16.0
- v0.15.0
- v0.14.0
- v0.13.0
- v0.12.0
- v0.11.0
- v0.10.0
- v0.9.0
- v0.8.6
- v0.8.5
- v0.8.4
- v0.8.3
- v0.8.2
- v0.8.1
- v0.8.0
- v0.7.9
- v0.7.8
- v0.7.7
- v0.7.6
- v0.7.5
- v0.7.4
- v0.7.3
- v0.7.2
- v0.7.1
- v0.7.0
- v0.6.2
- v0.6.1
- v0.6.0
- v0.6.0-alpha.6
import Drash from "https://deno.land/x/drash/mod.ts";
import Drash from "https://raw.githubusercontent.com/crookse/deno-drash/master/mod.ts";
Drash
View Documentation (still a work in progress)
Drash is a modular web framework for Deno based on HTTP resources and content negotiation.
Drash helps you quickly build web apps, APIs, services, and whatever else youâd want to build using HTTP resources and content negotiation. Clients can make requests to any resource you create and can request any representation your resources allow (e.g., application/json
format of the resource located at the /user/1234
URI).
Although this module is working, it is still very much under development. Reporting of bugs is greatly appreciated.
Contributing
Contributions are appreciated. Fork and send a pull request :)
Quickstart
app.ts
file.
Step 1 of 3: Create your import Drash from "https://deno.land/x/drash/mod.ts";
class HomeResource extends Drash.Http.Resource {
static paths = ["/"];
public GET() {
this.response.body = "GET request received!";
return this.response;
}
public POST() {
this.response.body = "POST request received!";
return this.response;
}
}
let server = new Drash.Http.Server({
address: "localhost:8000",
response_output: "text/html",
resources: [HomeResource],
static_paths: ["/public"]
});
server.run();
app.ts
file.
Step 2 of 3: Run your $ deno app.ts --allow-net
Step 3 of 3: Make the following HTTP requests:
Note: I recommend using Postman to make these requests. Itâs fast and versatile for web development.
GET localhost:8000/
POST localhost:8000/
Features
HTTP Resources
Drash uses HTTP resources. It doesnât use controllers and it doesnât use app.get('/', someHandler())
-like syntax. You create a resource class, define its URIs, and give it HTTP methods (e.g., GET()
, POST()
, PUT()
, DELETE()
, etc.).
Content Negotiation
Drash is based on resources and you canât have true resources unless clients can request different representations of those resources through content negotiation. Drash ships with application/json
, text/html
, application/xml
, and text/xml
handling just to meet the needs of standard APIs and web apps. However, you can add more content types for your Drash server to handle. See Adding More Content Types for further information.
Request Path Params (e.g., /users/:id
)
If you want to build your RESTful/ish API, then go ahead and use your path params. Resources can access their URIâs path params via this.request.path_params.some_param
.
Request URL Query Params (e.g., /users?id=1234
)
Canât have path params and not have request URL query params. Resources can access the requestâs URL query params via this.request.url_query_params.some_param
.
Semantic Method Names
If you want your resource class to allow GET
requests, then give it a GET()
method. If you want your resource class to allow POST
requests, then give it a POST()
method. If you donât want your resource class to allow DELETE
requests, then donât give your resource class a DELETE()
method. Pretty simple ideology and very semantic.