All Projects → surfstudio → NodeKit

surfstudio / NodeKit

Licence: MIT license
surfstudio.github.io/nodekit

Programming Languages

swift
15916 projects
go
31211 projects - #10 most used programming language

Projects that are alternatives of or similar to NodeKit

ark invest
daily report of @ARKInvest ETF activity + data collection
Stars: ✭ 25 (-7.41%)
Mutual labels:  requests
comments-generator
A Reddit bot that generates new context-aware comments using Markov chains trained from a set of given users or subreddits comments history.
Stars: ✭ 63 (+133.33%)
Mutual labels:  requests
kephas
Kephas Framework
Stars: ✭ 17 (-37.04%)
Mutual labels:  customizable
SJS DROPS
Script using requests module to register accounts to Slam Jam Socialism raffles.
Stars: ✭ 21 (-22.22%)
Mutual labels:  requests
companion-module-requests
Repository for tracking module requests
Stars: ✭ 60 (+122.22%)
Mutual labels:  requests
DadosAbertosBrasil
Pacote Python para acesso a dados abertos e APIs do governo brasileiro.
Stars: ✭ 28 (+3.7%)
Mutual labels:  requests
Punica-CSS-Framework
Punica CSS is a clean, lightweight, responsive, modern and fully customizable (even class names) pure CSS Framework based on SASS / SCSS with multi-theme support.
Stars: ✭ 35 (+29.63%)
Mutual labels:  customizable
python-ogren-4-saatte-python-baslangic
(TR) 4 saatlik Python başlangıç atölyesinin içerik dokümanı. (EN version is in progress!)
Stars: ✭ 71 (+162.96%)
Mutual labels:  requests
pterobilling
An open-source Laravel 8 online store, client area, and billing software specially made for Pterodactyl panel
Stars: ✭ 258 (+855.56%)
Mutual labels:  customizable
fastrates
💵 Free & open source API service for current and historical foreign exchange rates.
Stars: ✭ 26 (-3.7%)
Mutual labels:  requests
cp-tool
cp-tool is an auto generator for solved problems at different online judges.
Stars: ✭ 24 (-11.11%)
Mutual labels:  requests
rpatchur
A customizable, cross-platform patcher for Ragnarok Online clients.
Stars: ✭ 33 (+22.22%)
Mutual labels:  customizable
image-crawler
An image scraper that scraps images from unsplash.com
Stars: ✭ 12 (-55.56%)
Mutual labels:  requests
python-fxxk-spider
收集各种免费的 Python 爬虫项目
Stars: ✭ 184 (+581.48%)
Mutual labels:  requests
fullcontrols
Reworked version of the wpf controls, plus new controls and features.
Stars: ✭ 28 (+3.7%)
Mutual labels:  customizable
cordova-plugin-webserver
A webserver plugin for cordova
Stars: ✭ 101 (+274.07%)
Mutual labels:  requests
Peanuts
Peanuts is a free and open source wifi tracking tool. Based on the SensePosts Snoopy-NG project that is now closed.
Stars: ✭ 34 (+25.93%)
Mutual labels:  requests
vscode-react-javascript-snippets
Extension for React/Javascript snippets with search supporting ES7+ and babel features
Stars: ✭ 782 (+2796.3%)
Mutual labels:  customizable
curly.hpp
Simple cURL C++17 wrapper
Stars: ✭ 48 (+77.78%)
Mutual labels:  requests
ProxyGrab
Asynchronous Library made using Python and aiohttp to get proxies from multiple services!
Stars: ✭ 17 (-37.04%)
Mutual labels:  requests

Documentation Build status codebeat badge codecov

Гибкая и полностью кастомизируемая библиотека для работы с сетью.

Архитектура библиотеки представляет из себя граф узлов, где узел представляет из себя операцию по преобразовании входных данных. Таким образом мы преобразуем входные данные в ответ от сервера с помощью цепочки узлов. И такое преобразование может быть сколько угодно сложным. Причем подразумевается, что каждый отдельный узел может исполнятся в каком-то другом потоке.

All text

Такая архитектура позволяет гибко подстраиватья под самые разные требования в рамках одного проекта. При этом с точки зрения API все выглядит прозрачно

Как начать

Самый простой вариант:

import NodeKit

enum Endpoint: UrlRouteProvider {
    case loadData

    func url() throws -> URL {
        switch self {
        case .loadData: return try .from("https://http2.pro/api/v1")
        }
    }
}

func makeRequest() -> Observer<Void> {
    return UrlChainsBuilder()
        .default(with: .init(method: .post, route: Endpoint.loadData))
        .process(["key": "value"])
}

Это только пример 🙂 (так делать не надо)

У нас есть гайд. Так же в проекте есть песочницы:

Интересные кейсы

Проблема с маппингом

На одном из проектов был случай, связанный с маппингом ответов.

Более 30 методов работали по следующей схеме:

Code 200 ->
Body:
{
    #some data
}

В случае ошибки же

Code 400 ->
Body:
{
    code: int,
    message: string
}

Затем требования изменились и все новые методы (которые будут созданы) будут работать по другой схеме:

Успех:

Code 200 ->
Body:
{
    #some data
}

Ошибка:

Code 200 ->
Body:
{
    "error": {
        code: int,
        message: string
    }
}

Соответственно нам необходимо поддерживать сразу две схемы маппинга.

Эта задача очень просто решилась добавлением всего одного узла в слой траспорта, который определял что нужно замапить. Ошибку или данные.

Repeat

Было требование для определенных полей ввода организовывать "повторение запроса до успеха". Пользователь вводил данные в эти поля и мы должны были стучаться на сервер до тех пор, пока он не даст нам ответ.

И эта проблема решилась тоже очень просто. Достаточно было написать узел, который в случае ошибки тротлил выполнение цепочки, а затем повторял запрос.

Документация

Contribution Guide

Как этим пользоваться

Как работает библиотека

Существующие узлы

Реализованные цепочки

Про использование моделей

Логирование

Конексты и наблюдатели

Документация кода

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].