All Projects → svenvc → Zinc

svenvc / Zinc

Licence: mit
Zinc HTTP Components is an open-source Smalltalk framework to deal with the HTTP networking protocol.

Programming Languages

420 projects

Projects that are alternatives of or similar to Zinc

⚡️ High-level, High-performance HTTP(S) Clients/Servers in Reason/OCaml
Stars: ✭ 198 (+230%)
Mutual labels:  server, https, client
Simple Web Server
A very simple, fast, multithreaded, platform independent HTTP and HTTPS server and client library implemented using C++11 and Boost.Asio. Created to be an easy way to make REST resources available from C++ applications.
Stars: ✭ 2,261 (+3668.33%)
Mutual labels:  server, https, client
Simple Websocket Server
A very simple, fast, multithreaded, platform independent WebSocket (WS) and WebSocket Secure (WSS) server and client library implemented using C++11, Boost.Asio and OpenSSL. Created to be an easy way to make WebSocket endpoints in C++.
Stars: ✭ 685 (+1041.67%)
Mutual labels:  server, client
Node Minecraft Protocol
Parse and serialize minecraft packets, plus authentication and encryption.
Stars: ✭ 697 (+1061.67%)
Mutual labels:  server, client
Vertx Web
HTTP web applications for Vert.x
Stars: ✭ 853 (+1321.67%)
Mutual labels:  server, client
Go Smtp
📤 An SMTP client & server library written in Go
Stars: ✭ 655 (+991.67%)
Mutual labels:  server, client
Fast, asynchronous and elegant Python web framework.
Stars: ✭ 5,734 (+9456.67%)
Mutual labels:  server, client
Subscriptions Transport Sse
A Server-Side-Events (SSE) client + server for GraphQL subscriptions
Stars: ✭ 55 (-8.33%)
Mutual labels:  server, client
Fast ASGI web framework and HTTP client for Python asyncio
Stars: ✭ 450 (+650%)
Mutual labels:  server, client
A high performance, cross-platform Internet Communication Engine. Developed with native socket API. Aim at handling millions of concurrent connections.
Stars: ✭ 30 (-50%)
Mutual labels:  server, client
Go Bootstrap
Easy way to bootstrap a web server in Go (Routing|Middleware|Https)
Stars: ✭ 27 (-55%)
Mutual labels:  server, https
Modbus library for both RTU and TCP protocols. Primarily developed on and for ESP32 MCUs.
Stars: ✭ 29 (-51.67%)
Mutual labels:  server, client
Eclipse Milo™ - an open source implementation of OPC UA (IEC 62541).
Stars: ✭ 587 (+878.33%)
Mutual labels:  server, client
Live Torrent
Torrent Web Client
Stars: ✭ 546 (+810%)
Mutual labels:  server, client
A High Performance HTTP Server for Ruby
Stars: ✭ 679 (+1031.67%)
Mutual labels:  server, https
Awesome Openapi3
😎 A list of awesome projects related to OpenAPI 3.0.x, curated by the community
Stars: ✭ 469 (+681.67%)
Mutual labels:  server, client
Generator Ng Fullstack
Client, server or fullstack - it's up to you. ng-fullstack gives you the best of the latest.
Stars: ✭ 701 (+1068.33%)
Mutual labels:  server, client
Secure HTTP client with SSL pinning for Nativescript - iOS/Android
Stars: ✭ 45 (-25%)
Mutual labels:  https, client
REST API Client Library
Stars: ✭ 448 (+646.67%)
Mutual labels:  https, client
A command line tool and library for transferring data with URL syntax, supporting DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, POP3, POP3S, RTMP, RTMPS, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET and TFTP. libcurl offers a myriad of powerful features
Stars: ✭ 22,875 (+38025%)
Mutual labels:  https, client

Zinc HTTP Components

Zinc HTTP Components is an open-source Smalltalk framework to deal with the HTTP networking protocol.

Build Status

Based on core classes modelling all main HTTP concepts, a full featured HTTP client and server are provided.


Here are a couple of simple examples to give an impression of the API. You start a default (easy to reference) HTTP server with just one line of code.

ZnServer startDefaultOn: 1701.

Now you can browse locally to http://localhost:1701 - in particular have a look at the /help section and /echo - these are part of a set of demonstration handlers.

Accessing the server that we just started from code is easy too.

ZnClient new 
  url: ZnServer default localUrl; 
  addPathSegment: #echo; 
  entity: (ZnEntity text: 'Hello'); 

This builds an HTTP POST to our server's /echo handler with a simple text as resource. The server will echo information about the request it received, including the text resource that you posted.

By default, the demonstration server has a couple of handlers, mostly for testing. You can add your own, to do additions (sum two numbers), for example.

ZnServer default delegate 
  map: #adder to: [ :request | | x y sum |
    x := (request uri queryAt: #x) asNumber.
    y := (request uri queryAt: #y) asNumber.
    sum := x + y.
    ZnResponse ok: (ZnEntity text: sum asString) ].

This creates a new handler /adder that will take 2 query arguments, converts them to numbers and returns the result of adding them together.

Using the full client, we can test our new functionality.

ZnClient new 
  url: ZnServer default localUrl; 
  addPathSegment: #adder;
  queryAt: #x put: 1;
  queryAt: #y put: 2;

This builds an appropriate request to our /adder and executes it. By entering the proper URL directly, this becomes a one liner.

'http://localhost:1701/adder?x=1&y=2' asUrl retrieveContents.


Over the years, various documentation has been written about Zinc HTTP Components. Some of it is somewhat outdated. We list the most recent first.

The code base has decent class and method comments, as well as unit tests and examples.

The best starter documentation can be found in the Pharo Enterprise book.

In particular, in the following chapters:

A live website can be found at You can run part of this website locally.

The original Zinc HTTP Components paper.

The Building and deploying your first web app with Pharo tutorial.

There is a separate GemStone README.


Metacello new
  repository: 'github://svenvc/zinc/repository';
  baseline: 'ZincHTTPComponents';

Sven Van Caekenberghe

MIT Licensed

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].