2 Commits

Author SHA1 Message Date
Morten Olsen
6b74a28989 docs: improved docs 2025-05-18 21:26:05 +02:00
morten-olsen
ad342e5f10 docs: generated README 2025-05-18 19:12:53 +00:00
6 changed files with 92 additions and 29 deletions

View File

@@ -110,9 +110,9 @@ HTTP/200 OK
access-control-allow-credentials: true access-control-allow-credentials: true
access-control-allow-origin: * access-control-allow-origin: *
connection: keep-alive connection: keep-alive
content-length: 556 content-length: 555
content-type: application/json content-type: application/json
date: Sun, 18 May 2025 18:55:55 GMT date: Sun, 18 May 2025 19:12:17 GMT
server: gunicorn/19.9.0 server: gunicorn/19.9.0
{ {
@@ -129,12 +129,12 @@ server: gunicorn/19.9.0
"Host": "httpbin.org", "Host": "httpbin.org",
"Sec-Fetch-Mode": "cors", "Sec-Fetch-Mode": "cors",
"User-Agent": "node", "User-Agent": "node",
"X-Amzn-Trace-Id": "Root=1-682a2d3b-244883ec40275d5e642566d6" "X-Amzn-Trace-Id": "Root=1-682a3111-131bcbff690b03fd64aa4617"
}, },
"json": { "json": {
"greeting": "Hello, http.md!" "greeting": "Hello, http.md!"
}, },
"origin": "13.64.151.43", "origin": "23.96.180.7",
"url": "https://httpbin.org/post" "url": "https://httpbin.org/post"
} }
@@ -264,14 +264,14 @@ Within your markdown document, the following variables are available in the Hand
**1. Using a value from a previous response in a new request:** **1. Using a value from a previous response in a new request:**
````markdown ````markdown
```http id=createItem json ```http #createItem,json
POST https://httpbin.org/post POST https://httpbin.org/post
Content-Type: application/json Content-Type: application/json
{"name": "My New Item"} {"name": "My New Item"}
``` ```
The new item ID is: {{responses.createItem.body.json.name}} The new item ID is: {{response.body.json.name}}
Now, let's fetch the item using a (mocked) ID from the response: Now, let's fetch the item using a (mocked) ID from the response:
@@ -283,6 +283,61 @@ GET https://httpbin.org/anything/{{responses.createItem.body.json.name}}
```` ````
<details>
<summary>Output</summary>
````markdown
```http
POST https://httpbin.org/post
Content-Type: application/json
{"name": "My New Item"}
```
The new item ID is: My New Item
Now, let's fetch the item using a (mocked) ID from the response:
```http
GET https://httpbin.org/anything/My New Item
```
```
HTTP/200 OK
access-control-allow-credentials: true
access-control-allow-origin: *
connection: keep-alive
content-length: 451
content-type: application/json
date: Sun, 18 May 2025 19:12:18 GMT
server: gunicorn/19.9.0
{
"args": {},
"data": "",
"files": {},
"form": {},
"headers": {
"Accept": "*/*",
"Accept-Encoding": "br, gzip, deflate",
"Accept-Language": "*",
"Host": "httpbin.org",
"Sec-Fetch-Mode": "cors",
"User-Agent": "node",
"X-Amzn-Trace-Id": "Root=1-682a3112-4bbb29111129c1556c487ca1"
},
"json": null,
"method": "GET",
"origin": "23.96.180.7",
"url": "https://httpbin.org/anything/My New Item"
}
```
````
</details>
*(Note: `httpbin.org/post` wraps the JSON sent in a "json" field in its response. If your API returns the ID directly at the root of the JSON body, you'd use `{{responses.createItem.body.id}}` assuming the `createItem` request had the `json` option.)* *(Note: `httpbin.org/post` wraps the JSON sent in a "json" field in its response. If your API returns the ID directly at the root of the JSON body, you'd use `{{responses.createItem.body.id}}` assuming the `createItem` request had the `json` option.)*
**2. Displaying a status code in markdown text:** **2. Displaying a status code in markdown text:**

View File

@@ -209,34 +209,18 @@ The requests from the embedded document are processed, and their `request` and `
Assume `_shared_requests.md` contains: Assume `_shared_requests.md` contains:
````markdown ::raw-md[./examples/_shared_requests.md]
```http id=sharedGetRequest
GET https://httpbin.org/get
```
````
Then, in `main.md`: Then, in `main.md`:
````markdown ::raw-md[./examples/with-shared-requests.md]
# Main Document
Let's include some shared requests: <details>
<summary>Output</summary>
::md[./_shared_requests.md] ::raw-md[./examples/with-shared-requests.md]{render}
The shared GET request returned: {{responses.sharedGetRequest.status}} </details>
Now, a request specific to this document:
```http
POST https://httpbin.org/post
Content-Type: application/json
{"dataFromMain": "someValue", "sharedUrl": "{{requests.sharedGetRequest.url}}"}
```
::response
````
When `main.md` is processed, `_shared_requests.md` will be embedded, its `sharedGetRequest` will be executed, and its data will be available for templating. When `main.md` is processed, `_shared_requests.md` will be embedded, its `sharedGetRequest` will be executed, and its data will be available for templating.

View File

@@ -0,0 +1,3 @@
```http #sharedGetRequest
GET https://httpbin.org/get
```

View File

@@ -0,0 +1,18 @@
# Main Document
Let's include some shared requests:
::md[./_shared_requests.md]
The shared GET request returned: {{response.statusText}}
Now, a request specific to this document:
```http
POST https://httpbin.org/post
Content-Type: application/json
{"dataFromMain": "someValue", "sharedUrl": "{{requests.sharedGetRequest.url}}"}
```
::response

View File

@@ -10,6 +10,7 @@ type Response = {
statusText: string; statusText: string;
headers: Record<string, string>; headers: Record<string, string>;
body?: string; body?: string;
rawBody?: string;
}; };
type AddRequestOptios = { type AddRequestOptios = {

View File

@@ -59,7 +59,8 @@ const httpHandler: ExecutionHandler = ({
body body
}); });
let responseText = await response.text(); const rawBody = await response.text();
let responseText = rawBody;
if (options.json) { if (options.json) {
try { try {
responseText = JSON.parse(responseText); responseText = JSON.parse(responseText);
@@ -84,6 +85,7 @@ const httpHandler: ExecutionHandler = ({
statusText: response.statusText, statusText: response.statusText,
headers: Object.fromEntries(response.headers.entries()), headers: Object.fromEntries(response.headers.entries()),
body: responseText, body: responseText,
rawBody: rawBody,
}, },
}); });
}, },