hal-browser

An API browser for the hal+json media type

  • 所有者: mikekelly/hal-browser
  • 平台:
  • 許可證: MIT License
  • 分類:
  • 主題:
  • 喜歡:
    0
      比較:

Github星跟蹤圖

= HAL-browser

An API browser for the hal+json media type

== Example Usage

Here is an example of a hal+json API using the browser:

http://haltalk.herokuapp.com/explorer/browser.html[http://haltalk.herokuapp.com/explorer/browser.html]

== About HAL

HAL is a format based on json that establishes conventions for
representing links. For example:

[source,javascript]

{
"_links": {
"self": { "href": "/orders" },
"next": { "href": "/orders?page=2" }
}
}

More detail about HAL can be found at
http://stateless.co/hal_specification.html[http://stateless.co/hal_specification.html].

== Customizing the POST form

By default, the HAL Browser can't assume there is any metadata. When you click on the non-GET request button (to create a new resource), the user must enter the JSON document to submit. If your service includes metadata you can access, it's possible to plugin a custom view that makes use of it.

. Define your custom view.
+
Here is an example that leverages Spring Data REST's JSON Schema metadata found at /{entity}/schema.
+
[source,javascript]

var CustomPostForm = Backbone.View.extend({
initialize: function (opts) {
this.href = opts.href.split('{')[0];
this.vent = opts.vent;
_.bindAll(this, 'createNewResource');
},

events: {
	'submit form': 'createNewResource'
},

className: 'modal fade',

createNewResource: function (e) {
	e.preventDefault();

	var self = this;

	var data = {}
	Object.keys(this.schema.properties).forEach(function(property) {
		if (!("format" in self.schema.properties[property])) {
			data[property] = self.$('input[name=' + property + ']').val();
		}
	});

	var opts = {
		url: this.$('.url').val(),
		headers: HAL.parseHeaders(this.$('.headers').val()),
		method: this.$('.method').val(),
		data: JSON.stringify(data)
	};

	var request = HAL.client.request(opts);
	request.done(function (response) {
		self.vent.trigger('response', {resource: response, jqxhr: jqxhr});
	}).fail(function (response) {
		self.vent.trigger('fail-response', {jqxhr: jqxhr});
	}).always(function () {
		self.vent.trigger('response-headers', {jqxhr: jqxhr});
		window.location.hash = 'NON-GET:' + opts.url;
	});

	this.$el.modal('hide');
},

render: function (opts) {
	var headers = HAL.client.getHeaders();
	var headersString = '';

	_.each(headers, function (value, name) {
		headersString += name + ': ' + value + '\n';
	});

	var request = HAL.client.request({
		url: this.href + '/schema',
		method: 'GET'
	});

	var self = this;
	request.done(function (schema) {
		self.schema = schema;
		self.$el.html(self.template({
		    href: self.href,
		    schema: self.schema,
		    user_defined_headers: headersString}));
		self.$el.modal();
	});

	return this;
},
template: _.template($('#dynamic-request-template').html())

});

. Register it by assigning to HAL.customPostForm
+
[source,javascript]

HAL.customPostForm = CustomPostForm;

. Load your custom JavaScript component and define your custom HTML template.
+
[source,html,indent=0]

NOTE: To load a custom JavaScript module AND a custom HTML template, you will probably need to create a customized version of browser.html.

NOTE: The HAL Browser uses a global HAL object, so there is no need to deal with JavaScript packages.

== Usage Instructions

All you should need to do is copy the files into your webroot.
It is OK to put it in a subdirectory; it does not need to be in the root.

All the JS and CSS dependencies come included in the vendor directory.

== TODO

  • Provide feedback to user when there are issues with response (missing
    self link, wrong media type identifier)
  • Give 'self' and 'curies' links special treatment

主要指標

概覽
名稱與所有者mikekelly/hal-browser
主編程語言JavaScript
編程語言HTML (語言數: 3)
平台
許可證MIT License
所有者活动
創建於2012-04-27 13:18:40
推送於2024-04-23 12:03:35
最后一次提交2017-01-17 15:57:44
發布數0
用户参与
星數840
關注者數53
派生數157
提交數174
已啟用問題?
問題數45
打開的問題數32
拉請求數40
打開的拉請求數7
關閉的拉請求數13
项目设置
已啟用Wiki?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?