mirror of
https://github.com/foomo/foomo-docs.git
synced 2025-10-16 12:35:40 +00:00
feat: upgrade and gotsrpc docs WIP
This commit is contained in:
parent
3242ecbcaa
commit
e7ff60579e
@ -1,4 +1,4 @@
|
|||||||
# Introduction
|
# Gocontentful
|
||||||
|
|
||||||
## What is Contentful
|
## What is Contentful
|
||||||
|
|
||||||
@ -1,7 +1,4 @@
|
|||||||
---
|
# CMS
|
||||||
sidebar_position: 0
|
|
||||||
---
|
|
||||||
# Intro
|
|
||||||
|
|
||||||
The foomo team has extensive experience with a wide range of CMS systems. Our long journey in the field has brought us very close to the https://jamstack.org . We almost exclusively work with https://app.contentful.com/ but we are watching others like https://www.stripe.com/ very closely.
|
The foomo team has extensive experience with a wide range of CMS systems. Our long journey in the field has brought us very close to the https://jamstack.org . We almost exclusively work with https://app.contentful.com/ but we are watching others like https://www.stripe.com/ very closely.
|
||||||
|
|
||||||
@ -1,6 +0,0 @@
|
|||||||
# gotsrpc
|
|
||||||
|
|
||||||
https://github.com/foomo/gotsrpc
|
|
||||||
|
|
||||||
Since we are using go when writing
|
|
||||||
|
|
||||||
5
foomo/docs/projects/gotsrpc/01_getting-started.md
Normal file
5
foomo/docs/projects/gotsrpc/01_getting-started.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# Getting started
|
||||||
|
|
||||||
|
- install `gotsrpc` [cli](cli)
|
||||||
|
- clone and play with the [playground](playground)
|
||||||
|
- follow [workflow](workflow) instructions
|
||||||
15
foomo/docs/projects/gotsrpc/02_workflow.md
Normal file
15
foomo/docs/projects/gotsrpc/02_workflow.md
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# Workflow
|
||||||
|
|
||||||
|
## Initial setup in a project
|
||||||
|
|
||||||
|
- define a central place for your Go service interface definitions
|
||||||
|
- define a central place where your TypeScript client code will be generated to
|
||||||
|
- create one central [`gotsrpc.yaml`](gotsrpc.yaml)
|
||||||
|
- implement a TypeScript [`transport`](transport) for your project
|
||||||
|
|
||||||
|
## Per service
|
||||||
|
|
||||||
|
1. define [service interfaces](service-interfaces) in Go
|
||||||
|
2. configure code generation in [`gotsrpc.yaml`](gotsrpc.yaml)
|
||||||
|
3. generate service proxies and client with [`gotsrpc` cli](cli)
|
||||||
|
4. go to 1.
|
||||||
44
foomo/docs/projects/gotsrpc/03_service-interfaces.md
Normal file
44
foomo/docs/projects/gotsrpc/03_service-interfaces.md
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
# Service Interfaces
|
||||||
|
|
||||||
|
`Gotsrpc` services are defined in Go. Visit the [playground](playground)
|
||||||
|
|
||||||
|
## Interface definitions and value objects
|
||||||
|
|
||||||
|
All `gotsrpc` service definitions should be in a central place separated from their respective implementations.
|
||||||
|
|
||||||
|
### Definition of a service interface
|
||||||
|
|
||||||
|
Service interfaces for gotsrpc services are plain Go interfaces.
|
||||||
|
|
||||||
|
```go
|
||||||
|
type Service interface {
|
||||||
|
HelloWorld(name string) string
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Special handling of http request arguments
|
||||||
|
|
||||||
|
Despite the fact, that `gostrpc` is not RESTful it is possible and encouraged to access the underlying incoming [`w http.ResponseWriter`](https://pkg.go.dev/net/http#ResponseWriter) and [`r *http.Request`](https://pkg.go.dev/net/http#Request) arguments like in a [`http.HandlerFunc`](https://pkg.go.dev/net/http#HandlerFunc) for use cases like:
|
||||||
|
|
||||||
|
- http request headers eg to implement access tokens
|
||||||
|
- http request and response headers for cookie handling
|
||||||
|
- accessing [r.Context()](https://pkg.go.dev/net/http#Request.Context) for proper handling of context handling in the given request context
|
||||||
|
- ...
|
||||||
|
|
||||||
|
Service interface with http.HandlerFunc arguments
|
||||||
|
|
||||||
|
```go
|
||||||
|
type Service interface {
|
||||||
|
HelloWorld(w http.ResponseWriter, r *http.Request, name string) string
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
In the generated client code the interface will not change. Accessing headers, cookies etc is handled in your projects [client and transport](client-transport)
|
||||||
|
|
||||||
|
:::note
|
||||||
|
**arguments and return values have to be serializable**
|
||||||
|
|
||||||
|
All arguments and return values will be marshalled typically as [JSON](https://www.json.org)
|
||||||
|
|
||||||
|
[Also see protocol](protocol#encoding--marshalling)
|
||||||
|
:::
|
||||||
89
foomo/docs/projects/gotsrpc/04_value-objects.md
Normal file
89
foomo/docs/projects/gotsrpc/04_value-objects.md
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
# Value Objects
|
||||||
|
|
||||||
|
Typically value objects will be serialized / marshalled as JSON. Please refer to this documentation:
|
||||||
|
|
||||||
|
[https://pkg.go.dev/encoding/json#Marshal](https://pkg.go.dev/encoding/json#Marshal)
|
||||||
|
|
||||||
|
## Scalar types
|
||||||
|
|
||||||
|
### Supported in Go and TypeScript
|
||||||
|
|
||||||
|
| Go | TypeScript |
|
||||||
|
| ------ | ---------- |
|
||||||
|
| string | string |
|
||||||
|
| bool | boolean |
|
||||||
|
|
||||||
|
### Numerics / numbers
|
||||||
|
|
||||||
|
| Go | TypeScript |
|
||||||
|
| -------------------------------------- | ---------- |
|
||||||
|
| int, int8, int16, float32, float64 ... | number |
|
||||||
|
|
||||||
|
### Type Aliases
|
||||||
|
|
||||||
|
Go
|
||||||
|
```go
|
||||||
|
type Greeting string
|
||||||
|
```
|
||||||
|
|
||||||
|
TypeScript
|
||||||
|
```typescript
|
||||||
|
type Greeting = string;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Enumerations
|
||||||
|
|
||||||
|
Go does not support enumerations, but `gotsrpc` will translate constants to TypeScripts enums:
|
||||||
|
|
||||||
|
Go
|
||||||
|
```go
|
||||||
|
type Pet string
|
||||||
|
|
||||||
|
const (
|
||||||
|
Cat Pet = "cat"
|
||||||
|
Dog Pet = "dog"
|
||||||
|
Fish Pet = "fish"
|
||||||
|
)
|
||||||
|
|
||||||
|
type SeatCount int
|
||||||
|
|
||||||
|
const (
|
||||||
|
TwoSeats SeatCount = 2
|
||||||
|
FiveSeats SeatCount = 5
|
||||||
|
SevenSeats SeatCount = 7
|
||||||
|
)
|
||||||
|
```
|
||||||
|
|
||||||
|
TypeScript
|
||||||
|
```typescript
|
||||||
|
export enum Pet {
|
||||||
|
Cat = "cat",
|
||||||
|
Dog = "dog",
|
||||||
|
Fish = "fish",
|
||||||
|
}
|
||||||
|
|
||||||
|
export enum SeatCount {
|
||||||
|
FiveSeats = 5,
|
||||||
|
SevenSeats = 7,
|
||||||
|
TwoSeats = 2,
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Structs / Interfaces
|
||||||
|
|
||||||
|
```go
|
||||||
|
type Car struct {
|
||||||
|
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
interface Car {
|
||||||
|
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Slices / Arrays
|
||||||
|
|
||||||
|
## Maps / Records
|
||||||
|
|
||||||
2
foomo/docs/projects/gotsrpc/05_errors.md
Normal file
2
foomo/docs/projects/gotsrpc/05_errors.md
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
# Errors
|
||||||
|
|
||||||
30
foomo/docs/projects/gotsrpc/06_cli.md
Normal file
30
foomo/docs/projects/gotsrpc/06_cli.md
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
# cli
|
||||||
|
|
||||||
|
Command line program to generate gotsrpc clients and service proxies.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
Downloads are available here: https://github.com/foomo/gotsrpc/releases
|
||||||
|
|
||||||
|
Homebrew:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
brew install foomo/gotsrpc/gotsrpc
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
To run a code generation with `gosrpc` run
|
||||||
|
|
||||||
|
```shell
|
||||||
|
gotsrpc gotsrpc.yaml
|
||||||
|
```
|
||||||
|
|
||||||
|
- the referenced Go code has to compile
|
||||||
|
- mappings for all used packages must be configured
|
||||||
|
|
||||||
|
If things do not work as expected - carefully read the output.
|
||||||
|
|
||||||
|
:::caution
|
||||||
|
Previously generated code will be overwritten and potentially obsolete files will not be deleted - please add a clean to your build
|
||||||
|
:::
|
||||||
29
foomo/docs/projects/gotsrpc/07_client-transport.md
Normal file
29
foomo/docs/projects/gotsrpc/07_client-transport.md
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
# TypeScript client transport
|
||||||
|
|
||||||
|
## Client transport implementation
|
||||||
|
|
||||||
|
Every project has it's custom transport implementation. It typically is a good place for:
|
||||||
|
|
||||||
|
- http header handling for requests and responses eg adding trace ids
|
||||||
|
- custom handling of client vs server side transports (browser vs Node.js)
|
||||||
|
- central error handling
|
||||||
|
- client activity tracking
|
||||||
|
|
||||||
|
```typescript reference title="example transport"
|
||||||
|
https://github.com/foomo/gotsrpc-playground/blob/main/client/services/transport.ts#L1-L17
|
||||||
|
```
|
||||||
|
|
||||||
|
## Client client construction
|
||||||
|
|
||||||
|
Client construction is also project specific.
|
||||||
|
|
||||||
|
- special handling of server side endpoints
|
||||||
|
- adding transport middlewares
|
||||||
|
- passing through client request headers and cookies on the server side
|
||||||
|
|
||||||
|
This is a minimal client side client constructor:
|
||||||
|
|
||||||
|
```typescript reference title="example client construction"
|
||||||
|
https://github.com/foomo/gotsrpc-playground/blob/main/client/services/transport.ts#L18-L29
|
||||||
|
```
|
||||||
|
|
||||||
39
foomo/docs/projects/gotsrpc/99_playground/01_hello-world.md
Normal file
39
foomo/docs/projects/gotsrpc/99_playground/01_hello-world.md
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
# Hello, World!
|
||||||
|
|
||||||
|
Enter your name in a form, send it to the server and get a greeting in return.
|
||||||
|
|
||||||
|
[http://localhost:8080/hello-world](http://localhost:8080/hello-world)
|
||||||
|
|
||||||
|
## Go service
|
||||||
|
|
||||||
|
Service interface defintion
|
||||||
|
|
||||||
|
```go reference title="server/services/helloworld/service.go"
|
||||||
|
https://github.com/foomo/gotsrpc-playground/blob/main/server/services/helloworld/service.go
|
||||||
|
```
|
||||||
|
|
||||||
|
Service implementation
|
||||||
|
|
||||||
|
```go reference title="server/services/helloworld/service.go"
|
||||||
|
https://github.com/foomo/gotsrpc-playground/blob/main/server/server/helloworld.go
|
||||||
|
```
|
||||||
|
|
||||||
|
Service proxy instantiation
|
||||||
|
|
||||||
|
```go reference title="server/main.go"
|
||||||
|
https://github.com/foomo/gotsrpc-playground/blob/main/server/main.go#L37
|
||||||
|
```
|
||||||
|
|
||||||
|
Using the service proxy as a http handler
|
||||||
|
|
||||||
|
```go reference title="server/main.go"
|
||||||
|
https://github.com/foomo/gotsrpc-playground/blob/main/server/main.go#L59
|
||||||
|
```
|
||||||
|
|
||||||
|
## Next.js TypeScript client
|
||||||
|
|
||||||
|
Using the client in a Next.js page
|
||||||
|
|
||||||
|
```typescript reference title="client/pages/hello-world.tsx"
|
||||||
|
https://github.com/foomo/gotsrpc-playground/blob/main/client/pages/hello-world.tsx#L8-L21
|
||||||
|
```
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
# Wheel of Fortune
|
||||||
|
|
||||||
|
Spin the Wheel of Fortune to win a price.
|
||||||
|
|
||||||
|
[http://localhost:8080/wheel-of-fortune](http://localhost:8080/wheel-of-fortune)
|
||||||
|
|
||||||
|
## Go service
|
||||||
|
|
||||||
|
Service interface defintion
|
||||||
|
|
||||||
|
```go reference title="server/services/wof/service.go"
|
||||||
|
https://github.com/foomo/gotsrpc-playground/blob/main/server/services/wof/service.go
|
||||||
|
```
|
||||||
|
|
||||||
|
Service implementation
|
||||||
|
|
||||||
|
```go reference title="server/services/helloworld/service.go"
|
||||||
|
https://github.com/foomo/gotsrpc-playground/blob/main/server/server/wof.go
|
||||||
|
```
|
||||||
|
|
||||||
|
## Next.js TypeScript client
|
||||||
|
|
||||||
|
```typescript reference title="client/pages/wheel-of-fortune.tsx"
|
||||||
|
https://github.com/foomo/gotsrpc-playground/blob/main/client/pages/wheel-of-fortune.tsx
|
||||||
|
```
|
||||||
18
foomo/docs/projects/gotsrpc/99_playground/03_todos.md
Normal file
18
foomo/docs/projects/gotsrpc/99_playground/03_todos.md
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# Todos
|
||||||
|
|
||||||
|
## Go Service
|
||||||
|
|
||||||
|
Service interface defintion
|
||||||
|
|
||||||
|
```go reference title="server/services/wof/service.go" lines
|
||||||
|
https://github.com/foomo/gotsrpc-playground/blob/main/server/services/todos/service.go
|
||||||
|
```
|
||||||
|
|
||||||
|
Service implementation
|
||||||
|
|
||||||
|
```go reference title="server/services/helloworld/service.go"
|
||||||
|
https://github.com/foomo/gotsrpc-playground/blob/main/server/server/todos.go
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Next.js TypeScript client
|
||||||
62
foomo/docs/projects/gotsrpc/99_playground/index.md
Normal file
62
foomo/docs/projects/gotsrpc/99_playground/index.md
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
# Playground
|
||||||
|
|
||||||
|
The gotsrpc playground is designed to:
|
||||||
|
|
||||||
|
- provide examples for this documentation
|
||||||
|
- make it easy to play with gotsrpc on your local machine
|
||||||
|
|
||||||
|
It is **NOT** an example project to build an actual production service, because:
|
||||||
|
|
||||||
|
- it has a purely educational layout
|
||||||
|
- all services are exposed from one go program
|
||||||
|
- all service implementations are naive demo code with focus on documentation
|
||||||
|
- all service implementations are in one package
|
||||||
|
|
||||||
|
## Installing and running the playground
|
||||||
|
|
||||||
|
Prerequisites
|
||||||
|
|
||||||
|
- Go
|
||||||
|
- Node.js
|
||||||
|
|
||||||
|
Clone repo
|
||||||
|
|
||||||
|
```shell
|
||||||
|
git clone git@github.com:foomo/gotsrpc-playground.git ~/go/src/github.com/foomo/gotsrpc-playground
|
||||||
|
```
|
||||||
|
|
||||||
|
Run playground
|
||||||
|
|
||||||
|
```shell
|
||||||
|
cd ~/go/src/github.com/foomo/gotsrpc-playground
|
||||||
|
make run
|
||||||
|
```
|
||||||
|
|
||||||
|
Open the playground http://127.0.0.1:8080
|
||||||
|
|
||||||
|
## Project layout
|
||||||
|
|
||||||
|
Note : this is not a recommendation for a general project layout - it is purely educational.
|
||||||
|
|
||||||
|
| Location | Description |
|
||||||
|
| -------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
|
| `server` | server go code |
|
||||||
|
| `server/services` | service interfaces, one service interface per package helloworld, todos, ... |
|
||||||
|
| `server/server` | One package to implement all service interfaces with one file per service package - in a real world scenario, that typically is one package per service interface |
|
||||||
|
| `server/main.go` | Go program, that exposes all service implementations and reverse proxies the Next.js frontend which is running on http://127.0.0.1:3000 |
|
||||||
|
| `client` | Next.js TypeScript client created with `npx create-next-app@latest --typescript` |
|
||||||
|
| [`client/services/transport.ts`](https://github.com/foomo/gotsrpc-playground/blob/main/client/services/transport.ts) | An example transport implemenation |
|
||||||
|
| `client/services/generated` | Target for generated TypeScript clients and value objects as defined in `gotsrpc.yaml` |
|
||||||
|
|
||||||
|
ie relevant files per example:
|
||||||
|
|
||||||
|
| File | Description |
|
||||||
|
| -------------------------------------- | ---------------------------- |
|
||||||
|
| `server/services/<example>/service.go` | service interface definition |
|
||||||
|
| `server/server/<example>.go` | service implementation |
|
||||||
|
| `client/pages/<example>.tsx` | Next.js example page |
|
||||||
|
| `client/styles/<Example>.module.css` | CSS |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
31
foomo/docs/projects/gotsrpc/gotsrpc.yaml.md
Normal file
31
foomo/docs/projects/gotsrpc/gotsrpc.yaml.md
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
# gotsrpc.yaml
|
||||||
|
|
||||||
|
Typically there will be one central `gotsrpc.yaml` file per project.
|
||||||
|
|
||||||
|
## Purpose
|
||||||
|
|
||||||
|
### Go code generation rules
|
||||||
|
|
||||||
|
- service proxy generation
|
||||||
|
- client generation
|
||||||
|
|
||||||
|
### TypeScript code generation rules
|
||||||
|
|
||||||
|
- file names for clients in [Targets](#targets)
|
||||||
|
- file names for value object code generation [Mappings](#mappings)
|
||||||
|
|
||||||
|
## gotsrpc.yaml file sections
|
||||||
|
|
||||||
|
### Targets
|
||||||
|
|
||||||
|
Think of targets as build targets. A target is defined for all services in a package
|
||||||
|
|
||||||
|
```yml reference title="playground gotspc.yaml"
|
||||||
|
https://github.com/foomo/gotsrpc-playground/blob/main/gotsrpc.yaml#L1-L16
|
||||||
|
```
|
||||||
|
|
||||||
|
### Mappings
|
||||||
|
|
||||||
|
```yml reference title="playground gotspc.yaml"
|
||||||
|
https://github.com/foomo/gotsrpc-playground/blob/main/gotsrpc.yaml#L43-L46
|
||||||
|
```
|
||||||
46
foomo/docs/projects/gotsrpc/index.md
Normal file
46
foomo/docs/projects/gotsrpc/index.md
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
# gotsrpc
|
||||||
|
|
||||||
|
https://github.com/foomo/gotsrpc
|
||||||
|
|
||||||
|
Generated Go RPC service proxies for generated Go and TypeScript clients.
|
||||||
|
|
||||||
|
**`gotsrpc` ensures type safety and seamless integration of Go RPC services and TypeScript clients**
|
||||||
|
|
||||||
|
Everything starts with a Go interface definition. The gotsrpc command line tool can the be used to generate a Go service proxy and TypeScript and Go clients. The next step is to implement the interface in Go and expose it to http requests with the generated service proxies.
|
||||||
|
|
||||||
|
## Use cases
|
||||||
|
|
||||||
|
Who can do what with gotsrpc?
|
||||||
|
|
||||||
|
### Go developers
|
||||||
|
|
||||||
|
- expose Go interfaces as http RPC services
|
||||||
|
- consume Go interfaces with generated clients
|
||||||
|
|
||||||
|
### TypeScript developers
|
||||||
|
|
||||||
|
- consume APIs written in Go through an idiomatic TypeScript interface
|
||||||
|
|
||||||
|
|
||||||
|
## Design and architectural goals
|
||||||
|
|
||||||
|
- code first approach
|
||||||
|
- generated integration of TypeScript or Go clients and Go servers
|
||||||
|
- high productivity
|
||||||
|
- low latency between clients and servers
|
||||||
|
- good integration with browser dev tools (gotsrpc calls read well in the network tab)
|
||||||
|
- light weight clients
|
||||||
|
- idiomatic Go and TypeScript
|
||||||
|
- type safety between clients and servers
|
||||||
|
|
||||||
|
## Architectural notes
|
||||||
|
|
||||||
|
### Why not REST?
|
||||||
|
|
||||||
|
Fast and light weight frontends are hard to build on REST interfaces in an efficient manner. Also see the motivations behind GraphQL.
|
||||||
|
|
||||||
|
### Why not GraphQL?
|
||||||
|
|
||||||
|
GraphQL is great, when backend developers and thus custom backends are not available to the frontend team. In our experience writing Go services that provide dedicated gotsrpc interfaces works great - especially, if your are striving for high performance and low latencies.
|
||||||
|
|
||||||
|
This only works for teams in which frontend and backend developers work closely together.
|
||||||
56
foomo/docs/projects/gotsrpc/protocol.md
Normal file
56
foomo/docs/projects/gotsrpc/protocol.md
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
# Protocol
|
||||||
|
|
||||||
|
A gotsrpc method call is a **http POST** of an **array of arguments** to `http(s)://host/path/to/service/endpoint/<Method>`, that will return an **array of return values**. By default JSON is used for serialization.
|
||||||
|
|
||||||
|
|
||||||
|
Gotsrpc calls are not RESTful, but access to the underlying http requests and responses is possible. This is usually used for header access.
|
||||||
|
|
||||||
|
## HTTP status codes
|
||||||
|
|
||||||
|
The response status code is
|
||||||
|
|
||||||
|
- 200 for all responses (including the ones with business logic errors)
|
||||||
|
- 500 when the go code, that implements the service interface panics
|
||||||
|
|
||||||
|
## Encoding / Marshalling
|
||||||
|
|
||||||
|
`gotsrpc` supports
|
||||||
|
|
||||||
|
- [JSON](https://www.json.org/) (default)
|
||||||
|
- [MessagePack](https://msgpack.org/)
|
||||||
|
- [gob](https://pkg.go.dev/encoding/gob)
|
||||||
|
|
||||||
|
:::note
|
||||||
|
**gotsrpc service proxies are not using streaming encoders or decoders**:
|
||||||
|
|
||||||
|
- incoming data will be read completely from the request body
|
||||||
|
- decoding / unmarshalling is not streaming (for all encodings)
|
||||||
|
- return values will be encoded / marshalled in the same manner
|
||||||
|
- the response is streamed
|
||||||
|
|
||||||
|
Thus you should **use paging, when transferring a lot of data**.
|
||||||
|
:::
|
||||||
|
|
||||||
|
|
||||||
|
## Curl example call to a running playground server
|
||||||
|
|
||||||
|
A curl call tells more than a thousand words:
|
||||||
|
|
||||||
|
```shell
|
||||||
|
curl -v --data-raw '["Visitor"]' http://localhost:8080/services/helloworld/Hello
|
||||||
|
# > POST /services/helloworld/Hello HTTP/1.1
|
||||||
|
# > Host: localhost:8080
|
||||||
|
# >
|
||||||
|
# < HTTP/1.1 200 OK
|
||||||
|
# < Content-Type: application/json; charset=utf-8
|
||||||
|
# <
|
||||||
|
# ["Hello Visitor"]
|
||||||
|
```
|
||||||
|
|
||||||
|
When debugging and inspecting from the command line the `fx` command is very helpful https://github.com/antonmedv/fx
|
||||||
|
|
||||||
|
```shell
|
||||||
|
curl -v --data-raw '["Visitor"]' http://localhost:8080/services/helloworld/Hello | fx
|
||||||
|
# starts fx which will read the server response from stdin
|
||||||
|
# and provide a nice interactive json viewer
|
||||||
|
```
|
||||||
@ -1,2 +0,0 @@
|
|||||||
# Site reliability
|
|
||||||
|
|
||||||
@ -15,10 +15,10 @@
|
|||||||
"typecheck": "tsc"
|
"typecheck": "tsc"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@docusaurus/core": "2.3.1",
|
"@docusaurus/core": "^2.4.0",
|
||||||
"@docusaurus/preset-classic": "^2.3.1",
|
"@docusaurus/preset-classic": "^2.4.0",
|
||||||
"@docusaurus/theme-live-codeblock": "^2.3.1",
|
"@docusaurus/theme-live-codeblock": "^2.4.0",
|
||||||
"@docusaurus/theme-search-algolia": "^2.3.1",
|
"@docusaurus/theme-search-algolia": "^2.4.0",
|
||||||
"@mdx-js/react": "^1.6.21",
|
"@mdx-js/react": "^1.6.21",
|
||||||
"@saucelabs/theme-github-codeblock": "0.1.1",
|
"@saucelabs/theme-github-codeblock": "0.1.1",
|
||||||
"@svgr/webpack": "^5.5.0",
|
"@svgr/webpack": "^5.5.0",
|
||||||
@ -32,7 +32,7 @@
|
|||||||
"url-loader": "^4.1.1"
|
"url-loader": "^4.1.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@docusaurus/module-type-aliases": "^2.3.1",
|
"@docusaurus/module-type-aliases": "^2.4.0",
|
||||||
"@tsconfig/docusaurus": "^1.0.4",
|
"@tsconfig/docusaurus": "^1.0.4",
|
||||||
"typescript": "^4.9.5"
|
"typescript": "^4.9.5"
|
||||||
},
|
},
|
||||||
|
|||||||
1320
foomo/yarn.lock
1320
foomo/yarn.lock
File diff suppressed because it is too large
Load Diff
@ -1,7 +1,13 @@
|
|||||||
{
|
{
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@docusaurus/module-type-aliases": "^2.3.1",
|
"@docusaurus/module-type-aliases": "^2.4.0",
|
||||||
"@tsconfig/docusaurus": "^1.0.6",
|
"@tsconfig/docusaurus": "^1.0.6",
|
||||||
"typescript": "^4.9.5"
|
"typescript": "^4.9.5"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@docusaurus/core": "^2.4.0",
|
||||||
|
"@docusaurus/preset-classic": "^2.4.0",
|
||||||
|
"@docusaurus/theme-live-codeblock": "^2.4.0",
|
||||||
|
"@docusaurus/theme-search-algolia": "^2.4.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user