Giter Club home page Giter Club logo

Comments (7)

gitchandran avatar gitchandran commented on August 20, 2024

FYI. results come in the array [{...........}] . any other setting I need to do?

from terraform-provider-restapi.

DRuggeri avatar DRuggeri commented on August 20, 2024

Hi, @gitchandran - I'm afraid this is not enough information to debug the issue. If you notice, the API client says the following (which is the sign of a problem):
18:37:37 api_client.go: Sending HTTP request to https://test.com:4444/api/objects/network/dns_host/%3Cnil%3E...

The %3Cnil%3E is the likely problem - that is the URL encoded form of <nil>. I think enabling debug on the datasource is the next step - it should show the results that come back from the API as well as tell you more clearly what it's doing.

from terraform-provider-restapi.

gitchandran avatar gitchandran commented on August 20, 2024

Hi DRuggeri,

thanks for checking on this. I have used the code below in terraform and enabled the debug. Also, I have downgraded to 1.4 to see if i get the same error. Please see the log below. I am connecting to SOPHOS UTM. docs: https://www.sophos.com/en-us/medialibrary/PDFs/documentation/UTMonAWS/Sophos-UTM-RESTful-API.pdf?la=en

data "restapi_object" "test-dns-map" {
path = "/api/objects/network/dns_host"
search_key = "_ref"
search_value = "REF_NetDnsActiessint3"
results_key = "REF_NetDnsActiessint3"
debug = true
}

018/10/27 09:43:11 [TRACE] root: eval: *terraform.EvalReadDataApply
data.restapi_object.test-dns-map: Refreshing state...
2018-10-27T09:43:11.355-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: 2018/10/27 09:43:11 datasource_api_object.go: Data routine called.
2018-10-27T09:43:11.355-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: 2018/10/27 09:43:11 datasource_api_object.go:
2018-10-27T09:43:11.355-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: path: /api/objects/network/dns_host
2018-10-27T09:43:11.355-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: query_string:
2018-10-27T09:43:11.355-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: search_key: _ref
2018-10-27T09:43:11.355-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: search_value: REF_NetDnsActiessint3
2018-10-27T09:43:11.355-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: results_key: REF_NetDnsActiessint3
2018-10-27T09:43:11.355-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: 2018/10/27 09:43:11 datasource_api_object.go: Calling API on path '/api/objects/network/dns_host'
2018-10-27T09:43:11.355-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: 2018/10/27 09:43:11 api_client.go: method='GET', path='/api/objects/network/dns_host', full uri (derived)='https://test.com:4444/api/objects/network/dns_host', data=''
2018-10-27T09:43:11.355-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: 2018/10/27 09:43:11 api_client.go: Sending HTTP request to https://test.com:4444/api/objects/network/dns_host...
2018-10-27T09:43:11.355-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: 2018/10/27 09:43:11 api_client.go: Request headers:
2018-10-27T09:43:11.355-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: 2018/10/27 09:43:11 api_client.go: Authorization: Basic test=
2018-10-27T09:43:11.355-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: 2018/10/27 09:43:11 api_client.go: BODY:
2018-10-27T09:43:11.355-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: 2018/10/27 09:43:11
2018-10-27T09:43:12.071-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: 2018/10/27 09:43:12 api_client.go: Response code: 200
2018-10-27T09:43:12.072-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: 2018/10/27 09:43:12 api_client.go: Response headers:
2018-10-27T09:43:12.072-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: 2018/10/27 09:43:12 api_client.go: Content-Security-Policy: default-src 'self'; img-src 'self' data:; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; connect-src 'self' wss:;
2018-10-27T09:43:12.072-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: 2018/10/27 09:43:12 api_client.go: X-Content-Security-Policy: default-src 'self'; img-src 'self' data:; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; connect-src 'self' wss:;
2018-10-27T09:43:12.072-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: 2018/10/27 09:43:12 api_client.go: Vary: Origin,Accept-Encoding
2018-10-27T09:43:12.072-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: 2018/10/27 09:43:12 api_client.go: Server: Apache
2018-10-27T09:43:12.073-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: 2018/10/27 09:43:12 api_client.go: X-Content-Type-Options: nosniff
2018-10-27T09:43:12.073-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: 2018/10/27 09:43:12 api_client.go: X-Xss-Protection: 1; mode=block
2018-10-27T09:43:12.073-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: 2018/10/27 09:43:12 api_client.go: X-Webkit-Csp: default-src 'self'; img-src 'self' data:; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; connect-src 'self' wss:;
2018-10-27T09:43:12.073-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: 2018/10/27 09:43:12 api_client.go: Content-Type: application/json
2018-10-27T09:43:12.073-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: 2018/10/27 09:43:12 api_client.go: Date: Sat, 27 Oct 2018 16:43:48 GMT
2018-10-27T09:43:12.074-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: 2018/10/27 09:43:12 api_client.go: X-Frame-Options: SAMEORIGIN
2018-10-27T09:43:12.074-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: 2018/10/27 09:43:12 api_client.go: Strict-Transport-Security: max-age=63072000; includeSubDomains;
2018-10-27T09:43:12.084-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: 2018/10/27 09:43:12 api_client.go: BODY:
2018-10-27T09:43:12.084-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: [
2018-10-27T09:43:12.097-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: {
2018-10-27T09:43:12.097-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: "_locked": "",
2018-10-27T09:43:12.098-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: "_ref": "REF_NetDnsActiessint3",
2018-10-27T09:43:12.098-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: "_type": "network/dns_host",
2018-10-27T09:43:12.098-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: "address": "1.1.1.1",
2018-10-27T09:43:12.098-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: "address6": "::",
2018-10-27T09:43:12.098-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: "comment": "test",
2018-10-27T09:43:12.098-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: "hostname": "testing03.us-east-1.elb.amazonaws.com",
2018-10-27T09:43:12.098-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: "interface": "",
2018-10-27T09:43:12.098-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: "name": "testing01",
2018-10-27T09:43:12.098-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: "resolved": true,
2018-10-27T09:43:12.098-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: "resolved6": false,
2018-10-27T09:43:12.098-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: "timeout": 0
2018-10-27T09:43:12.098-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: },
2018-10-27T09:43:12.098-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: {
2018-10-27T09:43:12.098-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: "_locked": "",
2018-10-27T09:43:12.098-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: "_ref": "REF_NetDnsActiessint4",
2018-10-27T09:43:12.098-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: "_type": "network/dns_host",
2018-10-27T09:43:12.098-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: "address": "11.1.1.1",
2018-10-27T09:43:12.098-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: "address6": "::",
2018-10-27T09:43:12.098-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: "comment": "test",
2018-10-27T09:43:12.098-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: "hostname": "testing.us-east-1.elb.amazonaws.com",
2018-10-27T09:43:12.098-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: "interface": "",
2018-10-27T09:43:12.098-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: "name": "testing",
2018-10-27T09:43:12.098-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: "resolved": true,
2018-10-27T09:43:12.098-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: "resolved6": false,
2018-10-27T09:43:12.098-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: "timeout": 0
2018-10-27T09:43:12.098-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: }
2018-10-27T09:43:12.098-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: ]
2018-10-27T09:43:12.119-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: 2018/10/27 09:43:12 datasource_api_object.go: Response recieved... parsing
2018-10-27T09:43:12.119-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: 2018/10/27 09:43:12 datasource_api_object.go: Locating 'REF_NetDnsActiessint3' in the results
2018/10/27 09:43:12 [ERROR] root: eval: *terraform.EvalReadDataApply, err: data.restapi_object.test-dns-map: datasource_api_object.go: The results of a GET to '/api/objects/network/dns_host' did not return a hash. Cannot search within for results_key 'REF_NetDnsActiessint3'
2018/10/27 09:43:12 [ERROR] root: eval: *terraform.EvalSequence, err: data.restapi_object.test-dns-map: datasource_api_object.go: The results of a GET to '/api/objects/network/dns_host' did not return a hash. Cannot search within for results_key 'REF_NetDnsActiessint3'
2018/10/27 09:43:12 [TRACE] [walkRefresh] Exiting eval tree: data.restapi_object.test-dns-map
2018/10/27 09:43:12 [TRACE] dag/walk: upstream errored, not walking "provider.restapi (close)"
2018/10/27 09:43:12 [TRACE] dag/walk: upstream errored, not walking "root"
2018/10/27 09:43:12 [DEBUG] [aws-sdk-go] DEBUG: Request dynamodb/GetItem Details:
---[ REQUEST POST-SIGN ]-----------------------------
POST / HTTP/1.1
Host: dynamodb.ca-central-1.amazonaws.com
User-Agent: aws-sdk-go/1.14.31 (go1.10.1; linux; amd64) APN/1.0 HashiCorp/1.0 Terraform/0.11.8
Content-Length: 217
Accept-Encoding: identity


2018/10/27 09:43:13 [DEBUG] [aws-sdk-go] {}

Error: Error refreshing state: 1 error(s) occurred:

  • data.restapi_object.test-dns-map: 1 error(s) occurred:

  • data.restapi_object.test-dns-map: data.restapi_object.test-dns-map: datasource_api_object.go: The results of a GET to '/api/objects/network/dns_host' did not return a hash. Cannot search within for results_key 'REF_NetDnsActiessint3'

2018/10/27 09:43:13 [DEBUG] plugin: waiting for all plugin processes to complete...
2018-10-27T09:43:13.018-0700 [DEBUG] plugin.terraform-provider-restapi_v1.4.0-linux-amd64: 2018/10/27 09:43:13 [ERR] plugin: plugin server: accept unix /tmp/plugin853114669: use of closed network connection

from terraform-provider-restapi.

DRuggeri avatar DRuggeri commented on August 20, 2024

I think you were on the right track in your earlier comment. It looks like the results come back as an array, but you have declared in your configuration that the results_key (where the array is) is REF_NetDnsActiessint3. This is what the error Cannot search within for results_key 'REF_NetDnsActiessint3' means... it's trying to find the key in the results, but it's complaining that the results are an array rather than a hash of values:

[
  {
    "_locked": "",
    "_ref": "REF_NetDnsActiessint3",
    "_type": "network/dns_host",
    "address": "1.1.1.1",
    "address6": "::",
    "comment": "test",
    "hostname": "testing03.us-east-1.elb.amazonaws.com",
    "interface": "",
    "name": "testing01",
    "resolved": true,
    "resolved6": false,
    "timeout": 0
  },
  {
    "_locked": "",
    "_ref": "REF_NetDnsActiessint4",
    "_type": "network/dns_host",
    "address": "11.1.1.1",
    "address6": "::",
    "comment": "test",
    "hostname": "testing.us-east-1.elb.amazonaws.com",
    "interface": "",
    "name": "testing",
    "resolved": true,
    "resolved6": false,
    "timeout": 0
  }
]

... so I think you just need to remove results_key and call it good. I also notice that this response is not giving a 404 which is what you originally opened the issue for. I'm curious if you were able to diagnose/resolve that since the <nil> value in the URL looked strange.

from terraform-provider-restapi.

gitchandran avatar gitchandran commented on August 20, 2024

If I remove the result_key, I get the 404 error. It looks like it is looking for ID field? There is no id field. will this create a problem? can we define which fields to use for pulling the data? Also, I want to make sure it picks only one value out the array when it maps it locally instead of all the values from the arry

just want to pick the value below
{
"_locked": "",
"_ref": "REF_NetDnsActiessint3",
"_type": "network/dns_host",
"address": "1.1.1.1",
"address6": "::",
"comment": "test",
"hostname": "testing03.us-east-1.elb.amazonaws.com",
"interface": "",
"name": "testing01",
"resolved": true,
"resolved6": false,
"timeout": 0
},

thank you.

2018-10-29T13:06:07.621-0700 [DEBUG] plugin.terraform-provider-restapi_v1.5.0-linux-amd64: 2018/10/29 13:06:07 common.go:GetObjectAtKey: _ref - exists
2018-10-29T13:06:07.647-0700 [DEBUG] plugin.terraform-provider-restapi_v1.5.0-linux-amd64: 2018/10/29 13:06:07 datasource_api_object.go: Examining map[resolved:true address6::: interface: _type:network/dns_host address:10.20.41.117 comment:ess ppl internal ttt lb hostname:internal-bbb-ess-ttt-..amazonaws.com name:acti-ess-int-prod-bbb-ttt resolved6:false _locked: _ref:REF_NetDnsActiessint3 timeout:0]
2018-10-29T13:06:07.647-0700 [DEBUG] plugin.terraform-provider-restapi_v1.5.0-linux-amd64: 2018/10/29 13:06:07 datasource_api_object.go: Comparing 'REF_NetDnsActiessint3' to the value in '_ref'
2018-10-29T13:06:07.647-0700 [DEBUG] plugin.terraform-provider-restapi_v1.5.0-linux-amd64: 2018/10/29 13:06:07 common.go:GetObjectAtKey: Locating results_key in parts: [_ref]...
2018-10-29T13:06:07.647-0700 [DEBUG] plugin.terraform-provider-restapi_v1.5.0-linux-amd64: 2018/10/29 13:06:07 common.go:GetObjectAtKey: _ref - exists
2018-10-29T13:06:07.647-0700 [DEBUG] plugin.terraform-provider-restapi_v1.5.0-linux-amd64: 2018/10/29 13:06:07 datasource_api_object.go: Found ID
2018-10-29T13:06:07.647-0700 [DEBUG] plugin.terraform-provider-restapi_v1.5.0-linux-amd64: 2018/10/29 13:06:07 datasource_api_object.go: Attempting to construct api_object to refresh data
2018-10-29T13:06:07.647-0700 [DEBUG] plugin.terraform-provider-restapi_v1.5.0-linux-amd64: 2018/10/29 13:06:07 api_object.go: Constructing debug api_object
2018-10-29T13:06:07.647-0700 [DEBUG] plugin.terraform-provider-restapi_v1.5.0-linux-amd64: 2018/10/29 13:06:07 id:
2018-10-29T13:06:07.648-0700 [DEBUG] plugin.terraform-provider-restapi_v1.5.0-linux-amd64: 2018/10/29 13:06:07 api_object.go: Parsing data: '{}'
2018-10-29T13:06:07.648-0700 [DEBUG] plugin.terraform-provider-restapi_v1.5.0-linux-amd64: 2018/10/29 13:06:07 api_object.go: Constructed object: id:
2018-10-29T13:06:07.648-0700 [DEBUG] plugin.terraform-provider-restapi_v1.5.0-linux-amd64: get_path: /api/objects/network/dns_host/{id}
2018-10-29T13:06:07.648-0700 [DEBUG] plugin.terraform-provider-restapi_v1.5.0-linux-amd64: post_path: /api/objects/network/dns_host
2018-10-29T13:06:07.648-0700 [DEBUG] plugin.terraform-provider-restapi_v1.5.0-linux-amd64: put_path: /api/objects/network/dns_host/{id}
2018-10-29T13:06:07.648-0700 [DEBUG] plugin.terraform-provider-restapi_v1.5.0-linux-amd64: delete_path: /api/objects/network/dns_host/{id}
2018-10-29T13:06:07.648-0700 [DEBUG] plugin.terraform-provider-restapi_v1.5.0-linux-amd64: debug: true
2018-10-29T13:06:07.648-0700 [DEBUG] plugin.terraform-provider-restapi_v1.5.0-linux-amd64: data: (map[string]interface {}) {
2018-10-29T13:06:07.648-0700 [DEBUG] plugin.terraform-provider-restapi_v1.5.0-linux-amd64: }
2018-10-29T13:06:07.648-0700 [DEBUG] plugin.terraform-provider-restapi_v1.5.0-linux-amd64:
2018-10-29T13:06:07.648-0700 [DEBUG] plugin.terraform-provider-restapi_v1.5.0-linux-amd64: api_data: (map[string]interface {}) {
2018-10-29T13:06:07.648-0700 [DEBUG] plugin.terraform-provider-restapi_v1.5.0-linux-amd64: }
2018-10-29T13:06:07.648-0700 [DEBUG] plugin.terraform-provider-restapi_v1.5.0-linux-amd64:
2018-10-29T13:06:07.648-0700 [DEBUG] plugin.terraform-provider-restapi_v1.5.0-linux-amd64: 2018/10/29 13:06:07 api_client.go: method='GET', path='https://test.com:4444/api/objects/network/dns_host/', full uri (derived)='test.com:4444/api/objects/network/dns_host/%3Cnil%3E...
2018-10-29T13:06:07.648-0700 [DEBUG] plugin.terraform-provider-restapi_v1.5.0-linux-amd64: 2018/10/29 13:06:07 api_client.go: Request headers:
2018-10-29T13:06:07.648-0700 [DEBUG] plugin.terraform-provider-restapi_v1.5.0-linux-amd64: 2018/10/29 13:06:07 api_client.go: Authorization: Basic =
2018-10-29T13:06:07.648-0700 [DEBUG] plugin.terraform-provider-restapi_v1.5.0-linux-amd64: 2018/10/29 13:06:07 api_client.go: BODY:
2018-10-29T13:06:07.648-0700 [DEBUG] plugin.terraform-provider-restapi_v1.5.0-linux-amd64: 2018/10/29 13:06:07
2018/10/29 13:06:07 [ERROR] root: eval: *terraform.EvalReadDataApply, err: data.restapi_object.test-dns-map: Unexpected response code '404': 404 page not found
2018/10/29 13:06:07 [ERROR] root: eval: *terraform.EvalSequence, err: data.restapi_object.test-dns-map: Unexpected response code '404': 404 page not found
2018/10/29 13:06:07 [TRACE] [walkRefresh] Exiting eval tree: data.restapi_object.test-dns-map
2018/10/29 13:06:07 [TRACE] dag/walk: upstream errored, not walking "provider.restapi (close)"
2018/10/29 13:06:07 [TRACE] dag/walk: upstream errored, not walking "root"
2018/10/29 13:06:07 [DEBUG] [aws-sdk-go] DEBUG: Request dynamodb/GetItem Details:

from terraform-provider-restapi.

DRuggeri avatar DRuggeri commented on August 20, 2024

I'm afraid this is not the full output still, which makes this difficult to troubleshoot. To understand what is happening, the provider configuration, datasource configuration and full log is needed.

The best I can guess is that you do not have the correct id_attribute set on the provider or datasource because of this line:
2018-10-29T13:06:07.647-0700 [DEBUG] plugin.terraform-provider-restapi_v1.5.0-linux-amd64: 2018/10/29 13:06:07 id:

If no id_attribute is set, it does indeed default to "id". It seems to make sense because the results you shared do not have id. What bothers me is that there are checks in the code to prevent a missing id_attribute from letting the provider get this far. This is why the full log (provider initialization and all HTTP calls) would very helpful to see.

As a guess, the following may work based on the results that came back and your desired object:

data "restapi_object" "ttt-dns-map" {
  path = "/api/objects/network/dns_host"
  search_key = "name"
  search_value = "testing01"
  id_attribute = "_ref"
}

from terraform-provider-restapi.

gitchandran avatar gitchandran commented on August 20, 2024

Daniel, I just tested. id_attribute = "_ref" did the trick. thank you for this help and the plugin. I was not sure when I will get the solution. So, I did API automation using curl and jq. Now, I will move them to terraform.

from terraform-provider-restapi.

Related Issues (20)

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.