Giter Site home page Giter Site logo

japx's People

Contributors

ciaranmul avatar dundo7 avatar fgulan avatar madgeorge avatar matemasnov avatar nikolamajcen avatar rafaelfernandezalv avatar sviatoslavbmx avatar truba avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

japx's Issues

Fix warnings with flatMap

New Xcode complains that flatMap is deprecated, so this ought to be fixed. I replaced the flatMap calls with compactMap, but not sure if this was the intended use of flatMap in these cases.

Need support "not included" relationship item

Expected Behavior

If a JSON with relationships already determined, but the related item not stored in included, it will be decoded as null.
Is it the correct behavior?

{
    "data": [
        {
            "id": "33",
            "type": "time_off_request",
            "attributes": {
                "status": "approved",
                "start_date": "2019-01-14",
                "end_date": "2019-01-31"
            },
            "relationships": {
                "user": {
                    "data": {
                        "id": "25",
                        "type": "user"
                    }
                },
                "policy": {
                    "data": {
                        "id": "24",
                        "type": "time_off_policy"
                    }
                }
            }
        }
    ],
    "included": [
        {
            "id": "25",
            "type": "user",
            "attributes": {
                "id": 20550,
                "name": "user name",
                "email": "[email protected]",
                "avatar": "",
                "avatar_url": null
            }
        }
    ],
    "meta": {
        "total_pages": 1,
        "total_count": 1
    },
    "links": {
        "self": "url link"
    }
}

Decoded as :

{
  "links" : {
    "self" : "url link"
  },
  "meta" : {
    "total_pages" : 1,
    "total_count" : 1
  },
  "data" : [
    {
      "status" : "approved",
      "policy" : null,
      "id" : "33",
      "start_date" : "2019-01-14",
      "type" : "time_off_request",
      "end_date" : "2019-01-31",
      "user" : {
        "avatar" : "",
        "id" : 20550,
        "email" : "[email protected]",
        "type" : "user",
        "avatar_url" : null,
        "name" : "user name"
      }
    }
  ]
}

Actual Behavior

I think the related relationship item (policy field with type time_off_policy) not decoded as null, i.e :

{
  "links" : {
    "self" : "url link"
  },
  "meta" : {
    "total_pages" : 1,
    "total_count" : 1
  },
  "data" : [
    {
      "status" : "approved",
      "policy" : {
                        "id": "24",
                        "type": "time_off_policy"
                    },
      "id" : "33",
      "start_date" : "2019-01-14",
      "type" : "time_off_request",
      "end_date" : "2019-01-31",
      "user" : {
        "avatar" : "",
        "id" : 20550,
        "email" : "[email protected]",
        "type" : "user",
        "avatar_url" : null,
        "name" : "user name"
      }
    }
  ]
}

What do you think? Is it the correct implementation?
Or, is there a way to force the library to decode it as above?

Thanks

Unable to deserialise included with different types

Expected Behavior

I am trying to deserialize a response like this:

{
	"data": {
		"id": "1",
		"type": "schedule",
		"attributes": {},
		"relationships": {
			"requests": {
				"data": [{
					"type": "pickup_request",
					"id": "5"
				}, {
					"type": "swap_request",
					"id": "25"
				}]
			}
		},
		"links": {
			"self": "example.com/member/1/schedule"
		}
	},
	"included": [{
		"type": "pickup_request",
		"id": "5",
		"attributes": {
		    "attribute1": "",
		    "attribute2": "",
			"status": "requested"
		}
	}, {
		"type": "swap_request",
		"id": "25",
		"attributes": {
		    "attribute3": "",
			"status": "requested",
		}
	}]
}

As you notice the included items have different types.

Actual Behavior

An error is thrown

Steps to Reproduce the Problem

  1. Try to deserialize the above response

Specifications

  • Version: 1.0.0
  • Platform: macOS
  • Subsystem:

Empty relationships are sent as Attributes, not Relationships

Expected Behavior

While parsing, for example, the following structure:

struct Like: JapxCodable {
var id: String
var type: String = "likes"
}

struct Article: JapxCodable {
var id: String
var type: String = "articles"
var name: String
var likes: [Like]
}

Using

let notLikedArticle = Article(id: "1", name: "My Article", likes: [])
let params = try! JapxEncoder().encode(notLikedArticle)

I expected the relationships key to have an empty likes value:

["data": ["relationships": ["likes": ["data": [[]]]], "attributes": ["name": My Article], "id": 1, "type": articles]]

Actual Behavior

The likes is encoded in the attributes key instead:

["data": ["id": 1, "attributes": ["name": My Article, "likes": []], "relationships": [:], "type": articles]]

Steps to Reproduce the Problem

  1. Define the structures Article and Like described above
  2. Encode an article with empty array of likes.

Specifications

  • Version: Japx 2.1.0
  • Platform: iOS

I tried searching for options ou another way to configure that, but could not find any.
Updating the Japx to 3.0 requires me to change the minimum target of the project, and I cannot do that now.

Any help is welcome :)
Thanks!

Relationships without included resources are decoded to NSNull

Expected Behavior

Resources with relationships that are not included in the document should be decoded without losing the data that's specified in the relationship

Actual Behavior

The relationship key is set on the decoded dictionary, but the value is NSNull

Steps to Reproduce the Problem

The following code reproduces the issue:

let json = 
"""
{
  "data": {
    "type": "articles",
    "id": "1",
    "attributes": {
      "title": "Rails is Omakase"
    },
    "relationships": {
      "author": {
        "links": {
          "self": "http://example.com/articles/1/relationships/author",
          "related": "http://example.com/articles/1/author"
        },
        "data": {
          "type": "people",
          "id": "9"
        }
      }
    },
    "links": {
      "self": "http://example.com/articles/1"
    }
  }
}
"""

let result = try? Japx.Decoder.jsonObject(with: json.data(using: .utf8)!) // (result!["data"] as! [String: Any])["author"] is NSNull

Encode issue in objective-c code

Expected Behavior

while encoding "include" data that should be added inside the request body.

Actual Behavior

But if I gave a dictionary to encode it "include" data not coming.

Steps to Reproduce the Problem

  1. use objective-c code only for encoding and decoding from the JAPX folder.
  2. pass a dictionary to encode method there is no option to pass include list.
  3. That dictionary should have an array of dictionary data in the "relationship" part.

Request

Give me suggestions for how I can add the "included" part in my request body.

Specifications

  • Version:current
  • Platform:objective-c
  • Subsystem:

Included list support for Encoding

Expected Behavior

Updating relationships should be done by including objects into a list which should be encoded into the top level object. Basically, we'd need support for all top level objects besides data.

{
     "data": "...",
     "meta":"...",
     "included":"..."
}

Actual Behavior

What happens now is that all of the objects that are set in an included list end up being flattened into data.attributes

{
     "data": {
          "attributes": {
               "included":"..."
          }
     }
}

Steps to Reproduce the Problem

  1. Create a top level Request object that has other top level properties other than data
  2. Encode the object with JAPX

Support Attributes named "type"

Expected Behavior

An entity with an attribute named type is legal json-api, and therefore Japx should be able to decode a resource with a field named type

Actual Behavior

Japx already requires an instance variable on entities named type that is assigned to the entity-level type, and the parser pulls all attributes up and therefore creates a conflict between type on the entity level and a type inside attributes

Steps to Reproduce the Problem

  1. Prepare a json-api response containing an entity with an attribute named type
  2. Decode the response with JapxKit.Decoder
  3. See that the type attribute is overwritten by the entity-level type

Specifications

  • Version:
  • Platform:
  • Subsystem:

Not compatible with XCFramework

Expected Behavior

Could be used for XCFramework

Actual Behavior

Can not be used for XCFramework, the reason is that a class/struct in the framework has the same name as the framework - "Japx".
Discussion on swift forum - https://forums.swift.org/t/frameworkname-is-not-a-member-type-of-frameworkname-errors-inside-swiftinterface/28962
This is a known issue and needs a workaround

Steps to Reproduce the Problem

  1. Build XCFramework with Japx as a cocoa pod dependencie
  2. Try to use XCFramework as a cocoa pod dependencie
  3. As a result an error occurs:
    'JapxDecodable' is not a member type of 'Japx'

Specifications

  • Version: Xcode 12.0.1, Japx 3.0.0

Proposed Workaround

Rename Japx struct.

SPM - import Japx without the rest of the dependencies

Expected Behavior

Easily import japx and japxCore without having to import Moya, Alamofire, etc.

Actual Behavior

SPM downloads the whole package and it's dependencies causing dependency resolution issues despite not wanting to use the other targets.

i.e. Want to use japx and japxcore but not japxrxalamofire but still imports all dependencies causing existing alamofire to have dependency resolution issues

Steps to Reproduce the Problem

.package(
    url: "https://github.com/infinum/Japx",
    .exact("4.0.0")
)

Specifications

  • Version: 4.0.1
  • Platform: iOS
  • Subsystem:

SPM - Failed to resolve dependencies unstable version

Expected Behavior

Adding dependency for infinum/Japx 4.0.0 should correctly resolve

Actual Behavior

Dependencies could not be resolved because package 'japx' is required using a stable-version but 'japx' depends on an unstable-version package 'moya' and root depends on 'Japx' 4.0.0.

Steps to Reproduce the Problem

  1. include the following in a project's Package.swift dependencies:
.package(
    url: "https://github.com/infinum/Japx",
    .exact("4.0.0")
)
  1. Observe error

Specifications

  • Version: 4.0.0
  • Platform: iOS
  • Subsystem: -

How to encode object that contains meta

It might be due to my limited knowledge of this library, but I can't seem to find a way to encode object with meta field.
If I add meta property to object, it is encoded as attribute (i would say expectedly).
I can workaround this by manually inserting meta dictionary to encoded version of the object. But this is not very elegant.

I am using Codable extension.

Carthage support does not work

Expected Behavior

Builds to succeed

Actual Behavior

Builds fail

Steps to Reproduce the Problem

  1. Try to use this project with Carthage
  2. That's it, it dones't work

Specifications

  • Version: latest
  • Platform: any
  • Subsystem: ?

Cartfile

github "infinum/Japx" ~> 4.0

Output

❯ carthage bootstrap --platform iOS --use-xcframeworks
*** Checking out Japx at "4.0.1"
*** Checking out Alamofire at "5.5.0"
*** Checking out RxSwift at "6.5.0"
*** xcodebuild output can be found in /var/folders/wv/3x3z8j4567b5b2z10mnly2jm0000gn/T/carthage-xcodebuild.vCVhBj.log
*** Downloading RxSwift binary at "Atlas"
*** Building scheme "Alamofire iOS" in Alamofire.xcworkspace
A shell task (/usr/bin/xcrun xcodebuild -project /MY_PROJECT/Carthage/Checkouts/Japx/Examples/SwiftPM/JapxExample/JapxExample.xcodeproj CODE_SIGNING_REQUIRED=NO CODE_SIGN_IDENTITY= CARTHAGE=YES -list) failed with exit code 74:
objc[77024]: Class AMSupportURLConnectionDelegate is implemented in both /usr/lib/libauthinstall.dylib (0x20515ab90) and /Library/Apple/System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/MobileDevice (0x1040ec2c8). One of the two will be used. Which one is undefined.
objc[77024]: Class AMSupportURLSession is implemented in both /usr/lib/libauthinstall.dylib (0x20515abe0) and /Library/Apple/System/Library/PrivateFrameworks/MobileDevice.framework/Versions/A/MobileDevice (0x1040ec318). One of the two will be used. Which one is undefined.
xcodebuild: error: Unable to read project 'JapxExample.xcodeproj' from folder '/MY_PROJECT/Carthage/Checkouts/Japx/Examples/SwiftPM/JapxExample'.
	Reason: Project /MY_PROJECT/Carthage/Checkouts/Japx/Examples/SwiftPM/JapxExample/JapxExample.xcodeproj cannot be opened because it is missing its project.pbxproj file.

Moya/RxSwift update to 12.0.1

Expected Behavior

Moya/RxSwift has updated to version 12.0.1

Actual Behavior

Currently Moya flavoured pods are pointing to version 11.0

Specifications

  • Version: 1.0.3
  • Platform: iOS

Is it possible to consider updating to v12.0.1 for Moya dependencies at this point?

Carthage support?

Hi guys, is there any way that in the future there will be support for carthage?

Thanks!

How pars meta

Hello, I try parse this response

{
  "data": [
    {
      "type": "messages",
      "id": "1",
      "attributes": {
        "text": "qqq",
        "create_date": "2017-06-09T09:35:34.428523"
      },
      "meta": {
        "unread": true
      }
    }
  ]
}

this model not work

struct JapxResponse<T: Codable>: Codable {
  let data: T
}

struct MessageModel: JapxCodable, Equatable, Hashable {
  let type: String
  let id: String
  let text: String
  let createDate: String
  let unread: Bool

  enum CodingKeys: String, CodingKey {
    case type, id, text, createDate = "create_date", unread
  }
}

help pls, ty

Example CRUD using Codable and Alamofire

I need an example code of a CRUD using Codable and Alamofire. Because the support documentation has simples examples and I would like to know the best practices for this implementation.

Cannot create JapxCodable with nil id

Edit: realised I could just use JapxEncodable

From the JSONAPI specification website:

> Exception: The id member is not required when the resource object originates at the client and represents a new resource to be created on the server.

However, it is not possible to create a JapxCodable without an id.

Encoding object with nested included objects

Expected Behavior

There should be a documentation about encoding nested included objects.

Actual Behavior

Currently, nor on example project neither documentation, there is no info about this topic.

Steps to Reproduce the Problem

  1. can you plase add documentation or example.

Specifications

  • Version: Latest
  • Platform: iOS

Decoding is crashing

It is crashing on decoding the following json object:
But is working with other json

{
    "jsonapi": {
        "version": "1.0",
        "meta": {
            "links": {
                "self": {
                    "href": "http://jsonapi.org/format/1.0/"
                }
            }
        }
    },
    "data": [
        {
            "type": "commerce_product--estacao_de_servico",
            "id": "42f98d4f-0200-437a-84c9-f9793581460d",
            "links": {
                "self": {
                    "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/commerce_product/estacao_de_servico/42f98d4f-0200-437a-84c9-f9793581460d"
                }
            },
            "attributes": {
                "drupal_internal__product_id": 2,
                "langcode": "pt-pt",
                "status": true,
                "title": "Pen USB Repsol",
                "path": {
                    "alias": "/produto/pen-usb-repsol",
                    "pid": 11,
                    "langcode": "pt-pt"
                },
                "created": "2019-08-28T14:59:31+00:00",
                "changed": "2019-12-17T15:32:54+00:00",
                "default_langcode": true,
                "metatag": null,
                "body": {
                    "value": "<p>Pen USB Repsol.</p>\r\n",
                    "format": "basic_html",
                    "processed": "<p>Pen USB Repsol.</p>",
                    "summary": ""
                },
                "field_delivery": "Imediata nas Estações de Serviço.",
                "field_meta_tags": null
            },
            "relationships": {
                "commerce_product_type": {
                    "data": {
                        "type": "commerce_product_type--commerce_product_type",
                        "id": "d6efc374-e781-4388-bf3a-7cfce202ad25"
                    },
                    "links": {
                        "related": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/commerce_product/estacao_de_servico/42f98d4f-0200-437a-84c9-f9793581460d/commerce_product_type"
                        },
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/commerce_product/estacao_de_servico/42f98d4f-0200-437a-84c9-f9793581460d/relationships/commerce_product_type"
                        }
                    }
                },
                "stores": {
                    "data": [
                        {
                            "type": "commerce_store--online",
                            "id": "a8471acd-f641-4550-872f-11f5aa5e19ed"
                        }
                    ],
                    "links": {
                        "related": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/commerce_product/estacao_de_servico/42f98d4f-0200-437a-84c9-f9793581460d/stores"
                        },
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/commerce_product/estacao_de_servico/42f98d4f-0200-437a-84c9-f9793581460d/relationships/stores"
                        }
                    }
                },
                "uid": {
                    "data": null,
                    "links": {
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/commerce_product/estacao_de_servico/42f98d4f-0200-437a-84c9-f9793581460d/relationships/uid"
                        }
                    }
                },
                "variations": {
                    "data": [
                        {
                            "type": "commerce_product_variation--estacao_de_servico",
                            "id": "b1411858-68f1-4486-92cc-002df49bb235"
                        }
                    ],
                    "links": {
                        "related": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/commerce_product/estacao_de_servico/42f98d4f-0200-437a-84c9-f9793581460d/variations"
                        },
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/commerce_product/estacao_de_servico/42f98d4f-0200-437a-84c9-f9793581460d/relationships/variations"
                        }
                    }
                },
                "field_brand": {
                    "data": {
                        "type": "taxonomy_term--marca",
                        "id": "8ea56e8d-73fd-4fb0-8d67-ac029938b54b"
                    },
                    "links": {
                        "related": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/commerce_product/estacao_de_servico/42f98d4f-0200-437a-84c9-f9793581460d/field_brand"
                        },
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/commerce_product/estacao_de_servico/42f98d4f-0200-437a-84c9-f9793581460d/relationships/field_brand"
                        }
                    }
                },
                "field_category": {
                    "data": {
                        "type": "taxonomy_term--categories_store",
                        "id": "d628ccad-39fc-4135-9e34-3a9b197a2377"
                    },
                    "links": {
                        "related": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/commerce_product/estacao_de_servico/42f98d4f-0200-437a-84c9-f9793581460d/field_category"
                        },
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/commerce_product/estacao_de_servico/42f98d4f-0200-437a-84c9-f9793581460d/relationships/field_category"
                        }
                    }
                },
                "field_supplier": {
                    "data": {
                        "type": "taxonomy_term--seller",
                        "id": "35884fe2-ca79-43a3-afbe-3def2149ae4d"
                    },
                    "links": {
                        "related": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/commerce_product/estacao_de_servico/42f98d4f-0200-437a-84c9-f9793581460d/field_supplier"
                        },
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/commerce_product/estacao_de_servico/42f98d4f-0200-437a-84c9-f9793581460d/relationships/field_supplier"
                        }
                    }
                }
            }
        }
    ],
    "included": [
        {
            "type": "taxonomy_term--marca",
            "id": "8ea56e8d-73fd-4fb0-8d67-ac029938b54b",
            "links": {
                "self": {
                    "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/taxonomy_term/marca/8ea56e8d-73fd-4fb0-8d67-ac029938b54b"
                }
            },
            "attributes": {
                "drupal_internal__tid": 315,
                "drupal_internal__revision_id": 315,
                "langcode": "pt-pt",
                "revision_created": "2019-12-17T11:49:03+00:00",
                "revision_log_message": null,
                "status": true,
                "name": "Audioquest",
                "description": null,
                "weight": 0,
                "changed": "2019-12-17T11:49:03+00:00",
                "default_langcode": true,
                "revision_translation_affected": true,
                "metatag": null,
                "path": {
                    "alias": null,
                    "pid": null,
                    "langcode": "pt-pt"
                },
                "rh_action": null,
                "rh_redirect": null,
                "rh_redirect_response": null,
                "depth_level": 1
            },
            "relationships": {
                "vid": {
                    "data": null,
                    "links": {
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/taxonomy_term/marca/8ea56e8d-73fd-4fb0-8d67-ac029938b54b/relationships/vid"
                        }
                    }
                },
                "revision_user": {
                    "data": null,
                    "links": {
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/taxonomy_term/marca/8ea56e8d-73fd-4fb0-8d67-ac029938b54b/relationships/revision_user"
                        }
                    }
                },
                "parent": {
                    "data": [
                        {
                            "type": "taxonomy_term--marca",
                            "id": "virtual",
                            "meta": {
                                "links": {
                                    "help": {
                                        "href": "https://www.drupal.org/docs/8/modules/json-api/core-concepts#virtual",
                                        "meta": {
                                            "about": "Usage and meaning of the 'virtual' resource identifier."
                                        }
                                    }
                                }
                            }
                        }
                    ],
                    "links": {
                        "related": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/taxonomy_term/marca/8ea56e8d-73fd-4fb0-8d67-ac029938b54b/parent"
                        },
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/taxonomy_term/marca/8ea56e8d-73fd-4fb0-8d67-ac029938b54b/relationships/parent"
                        }
                    }
                },
                "field_image": {
                    "data": null,
                    "links": {
                        "related": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/taxonomy_term/marca/8ea56e8d-73fd-4fb0-8d67-ac029938b54b/field_image"
                        },
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/taxonomy_term/marca/8ea56e8d-73fd-4fb0-8d67-ac029938b54b/relationships/field_image"
                        }
                    }
                }
            }
        },
        {
            "type": "taxonomy_term--categories_store",
            "id": "d628ccad-39fc-4135-9e34-3a9b197a2377",
            "links": {
                "self": {
                    "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/taxonomy_term/categories_store/d628ccad-39fc-4135-9e34-3a9b197a2377"
                }
            },
            "attributes": {
                "drupal_internal__tid": 91,
                "drupal_internal__revision_id": 91,
                "langcode": "pt-pt",
                "revision_created": "2019-11-18T15:23:41+00:00",
                "revision_log_message": null,
                "status": true,
                "name": "Vales",
                "description": null,
                "weight": 1,
                "changed": "2019-11-19T12:41:37+00:00",
                "default_langcode": true,
                "revision_translation_affected": true,
                "metatag": null,
                "path": {
                    "alias": null,
                    "pid": null,
                    "langcode": "pt-pt"
                },
                "rh_action": "bundle_default",
                "rh_redirect": null,
                "rh_redirect_response": 301,
                "depth_level": 2,
                "field_rate": null
            },
            "relationships": {
                "vid": {
                    "data": null,
                    "links": {
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/taxonomy_term/categories_store/d628ccad-39fc-4135-9e34-3a9b197a2377/relationships/vid"
                        }
                    }
                },
                "revision_user": {
                    "data": null,
                    "links": {
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/taxonomy_term/categories_store/d628ccad-39fc-4135-9e34-3a9b197a2377/relationships/revision_user"
                        }
                    }
                },
                "parent": {
                    "data": [
                        {
                            "type": "taxonomy_term--categories_store",
                            "id": "2711f91c-9289-4b37-9fbb-c826804e3720"
                        }
                    ],
                    "links": {
                        "related": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/taxonomy_term/categories_store/d628ccad-39fc-4135-9e34-3a9b197a2377/parent"
                        },
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/taxonomy_term/categories_store/d628ccad-39fc-4135-9e34-3a9b197a2377/relationships/parent"
                        }
                    }
                },
                "field_icon": {
                    "data": {
                        "type": "file--file",
                        "id": "168ca355-1ff6-4c29-9969-b27e756e7c2e",
                        "meta": {
                            "alt": "Ofertas nas estações de serviço",
                            "title": "",
                            "width": 24,
                            "height": 24
                        }
                    },
                    "links": {
                        "related": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/taxonomy_term/categories_store/d628ccad-39fc-4135-9e34-3a9b197a2377/field_icon"
                        },
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/taxonomy_term/categories_store/d628ccad-39fc-4135-9e34-3a9b197a2377/relationships/field_icon"
                        }
                    }
                }
            }
        },
        {
            "type": "taxonomy_term--seller",
            "id": "35884fe2-ca79-43a3-afbe-3def2149ae4d",
            "links": {
                "self": {
                    "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/taxonomy_term/seller/35884fe2-ca79-43a3-afbe-3def2149ae4d"
                }
            },
            "attributes": {
                "drupal_internal__tid": 17,
                "drupal_internal__revision_id": 17,
                "langcode": "pt-pt",
                "revision_created": "2019-09-20T15:36:38+00:00",
                "revision_log_message": null,
                "status": true,
                "name": "El corte",
                "description": null,
                "weight": 0,
                "changed": "2019-12-06T12:03:05+00:00",
                "default_langcode": true,
                "revision_translation_affected": true,
                "metatag": null,
                "path": {
                    "alias": null,
                    "pid": null,
                    "langcode": "pt-pt"
                },
                "rh_action": "bundle_default",
                "rh_redirect": null,
                "rh_redirect_response": 301,
                "depth_level": 1
            },
            "relationships": {
                "vid": {
                    "data": null,
                    "links": {
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/taxonomy_term/seller/35884fe2-ca79-43a3-afbe-3def2149ae4d/relationships/vid"
                        }
                    }
                },
                "revision_user": {
                    "data": null,
                    "links": {
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/taxonomy_term/seller/35884fe2-ca79-43a3-afbe-3def2149ae4d/relationships/revision_user"
                        }
                    }
                },
                "parent": {
                    "data": [
                        {
                            "type": "taxonomy_term--seller",
                            "id": "virtual",
                            "meta": {
                                "links": {
                                    "help": {
                                        "href": "https://www.drupal.org/docs/8/modules/json-api/core-concepts#virtual",
                                        "meta": {
                                            "about": "Usage and meaning of the 'virtual' resource identifier."
                                        }
                                    }
                                }
                            }
                        }
                    ],
                    "links": {
                        "related": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/taxonomy_term/seller/35884fe2-ca79-43a3-afbe-3def2149ae4d/parent"
                        },
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/taxonomy_term/seller/35884fe2-ca79-43a3-afbe-3def2149ae4d/relationships/parent"
                        }
                    }
                },
                "field_image": {
                    "data": {
                        "type": "media--image",
                        "id": "9520e95e-b2ed-4c60-80a9-fc20ec9534de"
                    },
                    "links": {
                        "related": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/taxonomy_term/seller/35884fe2-ca79-43a3-afbe-3def2149ae4d/field_image"
                        },
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/taxonomy_term/seller/35884fe2-ca79-43a3-afbe-3def2149ae4d/relationships/field_image"
                        }
                    }
                }
            }
        },
        {
            "type": "commerce_product_variation--estacao_de_servico",
            "id": "b1411858-68f1-4486-92cc-002df49bb235",
            "links": {
                "self": {
                    "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/commerce_product_variation/estacao_de_servico/b1411858-68f1-4486-92cc-002df49bb235"
                }
            },
            "attributes": {
                "drupal_internal__variation_id": 2,
                "langcode": "pt-pt",
                "status": true,
                "sku": "USB Repsol",
                "title": "USB Repsol",
                "list_price": null,
                "price": {
                    "number": "0.000000",
                    "currency_code": "PTS",
                    "formatted": "0 pts"
                },
                "created": "2019-08-28T15:00:23+00:00",
                "changed": "2019-12-17T15:32:54+00:00",
                "default_langcode": true
            },
            "relationships": {
                "commerce_product_variation_type": {
                    "data": {
                        "type": "commerce_product_variation_type--commerce_product_variation_type",
                        "id": "01f90d75-47d8-407b-b481-7b545210a33f"
                    },
                    "links": {
                        "related": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/commerce_product_variation/estacao_de_servico/b1411858-68f1-4486-92cc-002df49bb235/commerce_product_variation_type"
                        },
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/commerce_product_variation/estacao_de_servico/b1411858-68f1-4486-92cc-002df49bb235/relationships/commerce_product_variation_type"
                        }
                    }
                },
                "uid": {
                    "data": null,
                    "links": {
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/commerce_product_variation/estacao_de_servico/b1411858-68f1-4486-92cc-002df49bb235/relationships/uid"
                        }
                    }
                },
                "product_id": {
                    "data": {
                        "type": "commerce_product--estacao_de_servico",
                        "id": "42f98d4f-0200-437a-84c9-f9793581460d"
                    },
                    "links": {
                        "related": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/commerce_product_variation/estacao_de_servico/b1411858-68f1-4486-92cc-002df49bb235/product_id"
                        },
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/commerce_product_variation/estacao_de_servico/b1411858-68f1-4486-92cc-002df49bb235/relationships/product_id"
                        }
                    }
                },
                "field_image": {
                    "data": [
                        {
                            "type": "media--image",
                            "id": "da8e3690-7cb9-41c4-9728-8f55a7494119"
                        },
                        {
                            "type": "media--image",
                            "id": "d1f060ce-4115-44de-a19e-d3377e3c80e2"
                        },
                        {
                            "type": "media--image",
                            "id": "8c12bb71-8f23-485e-ba2d-6ef40098d802"
                        }
                    ],
                    "links": {
                        "related": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/commerce_product_variation/estacao_de_servico/b1411858-68f1-4486-92cc-002df49bb235/field_image"
                        },
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/commerce_product_variation/estacao_de_servico/b1411858-68f1-4486-92cc-002df49bb235/relationships/field_image"
                        }
                    }
                }
            }
        },
        {
            "type": "media--image",
            "id": "da8e3690-7cb9-41c4-9728-8f55a7494119",
            "links": {
                "self": {
                    "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/media/image/da8e3690-7cb9-41c4-9728-8f55a7494119?resourceVersion=id%3A1"
                }
            },
            "attributes": {
                "drupal_internal__mid": 1,
                "drupal_internal__vid": 1,
                "langcode": "pt-pt",
                "revision_created": "2019-08-28T11:29:17+00:00",
                "revision_log_message": null,
                "status": true,
                "name": "placeholder_300x150.png",
                "created": "2019-08-28T11:29:00+00:00",
                "changed": "2019-08-28T14:27:40+00:00",
                "default_langcode": true,
                "revision_translation_affected": true,
                "metatag": null,
                "path": {
                    "alias": null,
                    "pid": null,
                    "langcode": "pt-pt"
                }
            },
            "relationships": {
                "bundle": {
                    "data": {
                        "type": "media_type--media_type",
                        "id": "7a1e1189-19d2-4e5d-a94a-7c6f1aa24a10"
                    },
                    "links": {
                        "related": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/media/image/da8e3690-7cb9-41c4-9728-8f55a7494119/bundle?resourceVersion=id%3A1"
                        },
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/media/image/da8e3690-7cb9-41c4-9728-8f55a7494119/relationships/bundle?resourceVersion=id%3A1"
                        }
                    }
                },
                "revision_user": {
                    "data": null,
                    "links": {
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/media/image/da8e3690-7cb9-41c4-9728-8f55a7494119/relationships/revision_user?resourceVersion=id%3A1"
                        }
                    }
                },
                "uid": {
                    "data": null,
                    "links": {
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/media/image/da8e3690-7cb9-41c4-9728-8f55a7494119/relationships/uid?resourceVersion=id%3A1"
                        }
                    }
                },
                "thumbnail": {
                    "data": {
                        "type": "file--file",
                        "id": "c46a63ea-8183-48c0-8678-6422be7ac8c2",
                        "meta": {
                            "alt": "placeholder",
                            "title": null,
                            "width": 200,
                            "height": 200
                        }
                    },
                    "links": {
                        "related": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/media/image/da8e3690-7cb9-41c4-9728-8f55a7494119/thumbnail?resourceVersion=id%3A1"
                        },
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/media/image/da8e3690-7cb9-41c4-9728-8f55a7494119/relationships/thumbnail?resourceVersion=id%3A1"
                        }
                    }
                },
                "field_media_image": {
                    "data": {
                        "type": "file--file",
                        "id": "c46a63ea-8183-48c0-8678-6422be7ac8c2",
                        "meta": {
                            "alt": "placeholder",
                            "title": "",
                            "width": 300,
                            "height": 150
                        }
                    },
                    "links": {
                        "related": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/media/image/da8e3690-7cb9-41c4-9728-8f55a7494119/field_media_image?resourceVersion=id%3A1"
                        },
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/media/image/da8e3690-7cb9-41c4-9728-8f55a7494119/relationships/field_media_image?resourceVersion=id%3A1"
                        }
                    }
                }
            }
        },
        {
            "type": "media--image",
            "id": "d1f060ce-4115-44de-a19e-d3377e3c80e2",
            "links": {
                "self": {
                    "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/media/image/d1f060ce-4115-44de-a19e-d3377e3c80e2?resourceVersion=id%3A2"
                }
            },
            "attributes": {
                "drupal_internal__mid": 2,
                "drupal_internal__vid": 2,
                "langcode": "pt-pt",
                "revision_created": "2019-08-28T14:32:26+00:00",
                "revision_log_message": null,
                "status": true,
                "name": "placeholder_200x200_1.png",
                "created": "2019-08-28T14:32:14+00:00",
                "changed": "2019-08-28T14:32:26+00:00",
                "default_langcode": true,
                "revision_translation_affected": true,
                "metatag": null,
                "path": {
                    "alias": null,
                    "pid": null,
                    "langcode": "pt-pt"
                }
            },
            "relationships": {
                "bundle": {
                    "data": {
                        "type": "media_type--media_type",
                        "id": "7a1e1189-19d2-4e5d-a94a-7c6f1aa24a10"
                    },
                    "links": {
                        "related": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/media/image/d1f060ce-4115-44de-a19e-d3377e3c80e2/bundle?resourceVersion=id%3A2"
                        },
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/media/image/d1f060ce-4115-44de-a19e-d3377e3c80e2/relationships/bundle?resourceVersion=id%3A2"
                        }
                    }
                },
                "revision_user": {
                    "data": null,
                    "links": {
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/media/image/d1f060ce-4115-44de-a19e-d3377e3c80e2/relationships/revision_user?resourceVersion=id%3A2"
                        }
                    }
                },
                "uid": {
                    "data": null,
                    "links": {
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/media/image/d1f060ce-4115-44de-a19e-d3377e3c80e2/relationships/uid?resourceVersion=id%3A2"
                        }
                    }
                },
                "thumbnail": {
                    "data": {
                        "type": "file--file",
                        "id": "a3528811-ec99-4404-9aa3-66d21cd8c902",
                        "meta": {
                            "alt": "placeholder",
                            "title": null,
                            "width": 200,
                            "height": 200
                        }
                    },
                    "links": {
                        "related": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/media/image/d1f060ce-4115-44de-a19e-d3377e3c80e2/thumbnail?resourceVersion=id%3A2"
                        },
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/media/image/d1f060ce-4115-44de-a19e-d3377e3c80e2/relationships/thumbnail?resourceVersion=id%3A2"
                        }
                    }
                },
                "field_media_image": {
                    "data": {
                        "type": "file--file",
                        "id": "a3528811-ec99-4404-9aa3-66d21cd8c902",
                        "meta": {
                            "alt": "placeholder",
                            "title": "",
                            "width": 200,
                            "height": 200
                        }
                    },
                    "links": {
                        "related": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/media/image/d1f060ce-4115-44de-a19e-d3377e3c80e2/field_media_image?resourceVersion=id%3A2"
                        },
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/media/image/d1f060ce-4115-44de-a19e-d3377e3c80e2/relationships/field_media_image?resourceVersion=id%3A2"
                        }
                    }
                }
            }
        },
        {
            "type": "media--image",
            "id": "8c12bb71-8f23-485e-ba2d-6ef40098d802",
            "links": {
                "self": {
                    "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/media/image/8c12bb71-8f23-485e-ba2d-6ef40098d802?resourceVersion=id%3A3"
                }
            },
            "attributes": {
                "drupal_internal__mid": 3,
                "drupal_internal__vid": 3,
                "langcode": "pt-pt",
                "revision_created": "2019-08-28T14:34:09+00:00",
                "revision_log_message": null,
                "status": true,
                "name": "placeholder_200x200_2.png",
                "created": "2019-08-28T14:33:49+00:00",
                "changed": "2019-08-28T14:34:09+00:00",
                "default_langcode": true,
                "revision_translation_affected": true,
                "metatag": null,
                "path": {
                    "alias": null,
                    "pid": null,
                    "langcode": "pt-pt"
                }
            },
            "relationships": {
                "bundle": {
                    "data": {
                        "type": "media_type--media_type",
                        "id": "7a1e1189-19d2-4e5d-a94a-7c6f1aa24a10"
                    },
                    "links": {
                        "related": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/media/image/8c12bb71-8f23-485e-ba2d-6ef40098d802/bundle?resourceVersion=id%3A3"
                        },
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/media/image/8c12bb71-8f23-485e-ba2d-6ef40098d802/relationships/bundle?resourceVersion=id%3A3"
                        }
                    }
                },
                "revision_user": {
                    "data": null,
                    "links": {
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/media/image/8c12bb71-8f23-485e-ba2d-6ef40098d802/relationships/revision_user?resourceVersion=id%3A3"
                        }
                    }
                },
                "uid": {
                    "data": null,
                    "links": {
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/media/image/8c12bb71-8f23-485e-ba2d-6ef40098d802/relationships/uid?resourceVersion=id%3A3"
                        }
                    }
                },
                "thumbnail": {
                    "data": {
                        "type": "file--file",
                        "id": "d5301e43-40d9-49ee-849a-6f82901ac311",
                        "meta": {
                            "alt": "placeholder",
                            "title": null,
                            "width": 200,
                            "height": 200
                        }
                    },
                    "links": {
                        "related": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/media/image/8c12bb71-8f23-485e-ba2d-6ef40098d802/thumbnail?resourceVersion=id%3A3"
                        },
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/media/image/8c12bb71-8f23-485e-ba2d-6ef40098d802/relationships/thumbnail?resourceVersion=id%3A3"
                        }
                    }
                },
                "field_media_image": {
                    "data": {
                        "type": "file--file",
                        "id": "d5301e43-40d9-49ee-849a-6f82901ac311",
                        "meta": {
                            "alt": "placeholder",
                            "title": "",
                            "width": 200,
                            "height": 200
                        }
                    },
                    "links": {
                        "related": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/media/image/8c12bb71-8f23-485e-ba2d-6ef40098d802/field_media_image?resourceVersion=id%3A3"
                        },
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/media/image/8c12bb71-8f23-485e-ba2d-6ef40098d802/relationships/field_media_image?resourceVersion=id%3A3"
                        }
                    }
                }
            }
        },
        {
            "type": "file--file",
            "id": "c46a63ea-8183-48c0-8678-6422be7ac8c2",
            "links": {
                "self": {
                    "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/file/file/c46a63ea-8183-48c0-8678-6422be7ac8c2"
                }
            },
            "attributes": {
                "drupal_internal__fid": 2,
                "langcode": "pt-pt",
                "filename": "placeholder_300x150.png",
                "uri": {
                    "value": "public://2019-08/placeholder_300x150.png",
                    "url": "/sites/default/files/2019-08/placeholder_300x150.png"
                },
                "filemime": "image/png",
                "filesize": 1095,
                "status": true,
                "created": "2019-08-28T14:27:37+00:00",
                "changed": "2019-08-28T14:27:40+00:00"
            },
            "relationships": {
                "uid": {
                    "data": null,
                    "links": {
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/file/file/c46a63ea-8183-48c0-8678-6422be7ac8c2/relationships/uid"
                        }
                    }
                }
            }
        },
        {
            "type": "file--file",
            "id": "a3528811-ec99-4404-9aa3-66d21cd8c902",
            "links": {
                "self": {
                    "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/file/file/a3528811-ec99-4404-9aa3-66d21cd8c902"
                }
            },
            "attributes": {
                "drupal_internal__fid": 3,
                "langcode": "pt-pt",
                "filename": "placeholder_200x200_1.png",
                "uri": {
                    "value": "public://2019-08/placeholder_200x200_1.png",
                    "url": "/sites/default/files/2019-08/placeholder_200x200_1.png"
                },
                "filemime": "image/png",
                "filesize": 781,
                "status": true,
                "created": "2019-08-28T14:32:18+00:00",
                "changed": "2019-08-28T14:32:26+00:00"
            },
            "relationships": {
                "uid": {
                    "data": null,
                    "links": {
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/file/file/a3528811-ec99-4404-9aa3-66d21cd8c902/relationships/uid"
                        }
                    }
                }
            }
        },
        {
            "type": "file--file",
            "id": "d5301e43-40d9-49ee-849a-6f82901ac311",
            "links": {
                "self": {
                    "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/file/file/d5301e43-40d9-49ee-849a-6f82901ac311"
                }
            },
            "attributes": {
                "drupal_internal__fid": 4,
                "langcode": "pt-pt",
                "filename": "placeholder_200x200_2.png",
                "uri": {
                    "value": "public://2019-08/placeholder_200x200_2.png",
                    "url": "/sites/default/files/2019-08/placeholder_200x200_2.png"
                },
                "filemime": "image/png",
                "filesize": 781,
                "status": true,
                "created": "2019-08-28T14:34:03+00:00",
                "changed": "2019-08-28T14:34:09+00:00"
            },
            "relationships": {
                "uid": {
                    "data": null,
                    "links": {
                        "self": {
                            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/file/file/d5301e43-40d9-49ee-849a-6f82901ac311/relationships/uid"
                        }
                    }
                }
            }
        }
    ],
    "links": {
        "self": {
            "href": "https://repsolmove.dev.server.diamondbybold.com/jsonapi/commerce_product/estacao_de_servico?fields%5Bvariations%5D%5Bfield_image%5D=field_media_image&fields%5Bvariations%5D%5Bfield_media_image%5D=uri%2Curl&filter%5Bcategories_store%5D%5Bcondition%5D%5Boperator%5D=%3D&filter%5Bcategories_store%5D%5Bcondition%5D%5Bpath%5D=field_category.tid&filter%5Bcategories_store%5D%5Bcondition%5D%5Bvalue%5D=91&include=field_brand%2Cfield_category%2Cfield_supplier%2Cvariations%2Cvariations.field_image%2Cvariations.field_image.field_media_image%2Cvariations.field_image.field_media_image"
        }
    }
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.